我想将文件的内容作为值存储在unordered_map
中。我想避免在文件读取后出现任何副本。我的例子正确吗?
// key - path, value - pair of file's content and the last update time
std::unordered_map<std::string_view, std::pair<std::vector<char>, std::filesystem::file_time_type>> filesCache;
std::ifstream file(std::string{path}, std::ios::binary);
std::vector<char> fileContents;
fileContents.reserve(std::filesystem::file_size(path));
fileContents.assign(std::istreambuf_iterator<char>(file),
std::istreambuf_iterator<char>());
// I need to keep the file's content up to date
filesCache.insert_or_assign(path, std::make_pair(std::move(fileContents), std::filesystem::last_write_time(path)));
我不应该先插入密钥,然后使用已放置的值吗?
std::ifstream file(std::string{path}, std::ios::binary);
auto& [fileContents, lastUpdateTime] = scriptsCache_[path];
lastUpdateTime = std::filesystem::last_write_time(path);
fileContents.reserve(std::filesystem::file_size(path));
fileContents.assign(std::istreambuf_iterator<char>(file),
std::istreambuf_iterator<char>());
还是两个例子都一样?如何检查?
它们是相同的(在std::vector
没有被复制的意义上,只是在insert_or_assign
的情况下移动(
不同之处在于,当读取失败时,
- 第一种情况:您根本没有插入节点
- 第二种情况:你需要记住从地图上删除条目