关于如何从大型unsorted_multimap
中获取公共密钥的任何想法???我使用file_name(string)
作为键,将size(int)
作为值。基本上我正在使用unsorted_multimap
中每个文件的boost和holding条目扫描目录以搜索重复文件。一旦这个映射准备就绪,我需要输出公共密钥(file_name),并将大小作为重复文件列表。
答案 0 :(得分:0)
如何查找unsorted_multimap
的常用密钥?
以下代码搜索特定文件名,并使用相同的密钥遍历所有元素:
std::unordered_multimap<std::string, int> mymulti; // key: filename, value: size
//... fill the multimap
for (auto x = mymulti.find("fileb"); x != mymulti.end() && x->first == "fileb"; x++) {
std::cout << x->second << " "; // do something !
}
std::cout << "}\n"; // end something !
如何通过公共密钥迭代unsorted_multimap
,进行goupring处理?
以下代码遍历整个地图,对于eacuh键,在子循环中处理相关值:
for (auto i = mymulti.begin(); i != mymulti.end(); ) { // iterate through multimap
auto group = i->first; // start a new group
std::cout << group << "={"; // start doing something for the group
do {
std::cout << i->second << " "; // do something for every values of the group
} while (++i != mymulti.end() && i->first == group); // until we change value
std::cout << "}\n"; // end something for the group
}
// end overal processing of the map
如何查找重复文件(相同的密钥和相同的值)?
使用上面的构建块,您可以为每个文件名创建一个大小为value的临时unsorted_map,查看该元素是否已在临时映射中(重复)或添加(非重复)。
如果unsorted_multimap
的整个目的是处理这些重复项,那么从一开始就构建一个文件名为unosorted_map
并将其值为multimap
大小作为排序键和值,您在文件上收集的其他元素(完整的URL?inode?wathever):
unsorted_map<string, multimap<long, filedata>> myspecialmap;