gsf*_*gsf 4 c++ boost unordered-map
在 boost unordered_multimap 中循环唯一键的最简单方法是什么。
例如我有这个:
std::set<int> used;
for (auto p : valuesMap)
{
if (used.count(p.first))
continue;
used.insert(p.first);
auto range = valuesMap.equal_range(p.first);
if (p.first)
for (auto v = range.first; v != range.second; ++v)
//do something;
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来做到这一点。似乎无序映射应该已经知道唯一键。
您想要做的是找到一种方法来获取遵循某个键的迭代器。在multimap我通常使用upper_bound. 但由于unordered_multimap没有 - 我将不得不使用equal_range.second:
for (auto iter=valueMap.begin();
iter!=valueMap.end();
iter=ValueMap.equal_range(iter->first)->second){
uniq_key=iter->first;
// Do whatever you want with uniq_key
}
Run Code Online (Sandbox Code Playgroud)
但是你的例子对我来说很奇怪 - 因为你确实检查了所有元素。如果我想写你的代码,做你所做的,我会这样做:
for (auto iter=valueMap.begin()
iter!=valueMap.end();
){ // Notice the lack of ++iter!!!
auto end=valueMap.equal_range(ier->first)->second;
for (;iter!=end;++iter)
// Do something
}
Run Code Online (Sandbox Code Playgroud)