将矢量移动到无序映射中



我想将文件的内容作为值存储在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的情况下移动(


不同之处在于,当读取失败时,

  • 第一种情况:您根本没有插入节点
  • 第二种情况:你需要记住从地图上删除条目

相关内容

  • 没有找到相关文章

最新更新