c++ 在O(count(k))中遍历std::unordered_multimap中所有键为k的元素

z9ju0rcb  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(185)

我有一个std::unordered_multimap,并且想要用给定的键k迭代所有的元素,而不是迭代整个Map,而是最优地只遍历匹配的元素。
虽然我可以在有序的std::multimap中使用upper_bound执行此操作,但我找不到find()后面跟随向前迭代直到键不同为止将遍历键k的所有示例的规范,因为find(k)仅保证返回具有键k的任意项
编辑:我知道在我的特定情况下,我可以用一个std::unordered_map〈Key,std::vector〉来代替,它会匹配我所有的需求,这个问题更多的是出于好奇。
还是我错过了什么?
我的消息来源是:https://en.cppreference.com/w/cpp/container/unordered_multimap/find

dfty9e19

dfty9e191#

unordered_map::equal_rangecppreference示例:

#include <iostream>
#include <unordered_map>
 
int main()
{  
    std::unordered_multimap<int,char> map = {{1,'a'},{1,'b'},{1,'d'},{2,'b'}};
    auto range = map.equal_range(1);
    for (auto it = range.first; it != range.second; ++it) {
        std::cout << it->first << ' ' << it->second << '\n';
    }
}

输出:
复杂性是
平均情况下与密钥的元素数量呈线性,最差情况下与容器大小呈线性。
注意,复杂性在于获得迭代器,一旦获得迭代器,循环就是所需的O(count(k))

相关问题