увеличить цикл unordered_multimap над уникальными ключами

Какой самый простой способ перебрать уникальные ключи в бусте 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;
}

Есть ли лучший способ сделать это. Кажется, что уникальные ключи должны быть уже известны неупорядоченной карте.

3

Решение

Что вы хотите сделать, так это найти способ заставить итератор следовать определенному ключу. В 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
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]