在unsorted_multimap中查找公共(或重复)键

时间:2014-09-20 14:25:34

标签: c++ stl multimap

关于如何从大型unsorted_multimap中获取公共密钥的任何想法???我使用file_name(string)作为键,将size(int)作为值。基本上我正在使用unsorted_multimap中每个文件的boost和holding条目扫描目录以搜索重复文件。一旦这个映射准备就绪,我需要输出公共密钥(file_name),并将大小作为重复文件列表。

1 个答案:

答案 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;