1

我有一个std::unordered_multimap并且我想对每个键只迭代一次。

我目前正在做的是将所有密钥复制到std::set. 这对我来说似乎效率很低,我想知道是否有更聪明的方法来做到这一点。如果是 astd::multiset我会使用该std::multiset::upper_bound()成员来访问下一个键,但是该成员显然在无序版本中不可用。

我发现了一些相关的问题和答案,但就我的目的而言,它们似乎已经过时/过于复杂。

那么有没有一种遍历不同键的好方法呢?我仍在学习,因此将我指向正确的方向也将不胜感激!谢谢。

4

1 回答 1

1

[...] 具有等效键的元素在容器的迭代顺序中彼此相邻。

来源,或者你可以认为这是存在的保证equal_range。请注意,“等效”在KeyEqualie 下,表示==是否指定了默认值std::equal_to<Key>

因此,逐个元素迭代,跳过具有相同键的元素,将起作用:

for (auto it = c.begin(); it != c.end(); ) {
    auto const& key = it->first;
    std::cout << key << std::endl;
    while (++it != c.end() && it->first == key) // or c.key_eq()
        ;
}
于 2020-01-10T21:27:31.727 回答