Какой самый простой способ перебрать уникальные ключи в бусте 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;
}
Есть ли лучший способ сделать это. Кажется, что уникальные ключи должны быть уже известны неупорядоченной карте.
Что вы хотите сделать, так это найти способ заставить итератор следовать определенному ключу. В 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
}
Но твой пример для меня странен — потому что ты действительно проходишь все элементы. Если бы я хотел написать ваш код, делая то, что вы делаете, вот как я бы это сделал:
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
}
Других решений пока нет …