90%的C++ 程序员都忽略了这个容器——unordered_multiset,让我们来看看开源项目中怎么使用的
在C++标准模板库(STL)的容器大家族中,std::unordered_multiset
是一个独特而强大的成员。然而,在日常开发中,它的出镜率似乎远不如 std::vector
或 std::unordered_map
。这往往不是因为它不够优秀,而是因为许多开发者未能深刻理解其设计哲学与核心价值。
std::unordered_multiset
本质上是一个关联容器,它将接收到的元素作为键(Key)进行存储,并具备四大核心特性:
- 关联容器 (Associative):它根据元素的“值”来组织存储,这个值同时也是用于检索的“键”。
- 无序性 (Unordered):其内部基于哈希表实现,元素不会像
std::multiset
那样保持特定的排序顺序。迭代其元素时,顺序是不确定的。 - 允许重复 (Multi):这是它与
std::unordered_set
的关键区别。它可以存储多个值完全相等的元素。 - 高效性能 (Efficient):对于插入、删除和查找操作,它提供了惊人的平均时间复杂度——O(1)。
核心原理与内部实现
std::unordered_multiset
的高性能秘诀在于其底层的哈希表 (Hash Table)<