multimap 和multiset
时间: 2025-03-04 11:38:21 浏览: 50
### 多重映射与多重集合的区别
在C++标准模板库(STL)中,`std::multimap`和`std::multiset`都是关联容器,允许存储键值对或多组数据项。然而两者之间存在显著差异。
#### 键唯一性
对于`std::multiset`而言,该容器专门用于保存多个具有相同值的数据元素[^3]。而`std::multimap`则不仅能够容纳重复的键,还支持每个键对应多个不同的值。
#### 数据结构实现方式
值得注意的是,上述四种基于红黑树实现的容器——即`set`, `map`, `multiset`以及`multimap`均保持有序状态;相比之下,无序版本如`unordered_set`和`unordered_map`则是通过哈希表来实现高效查找性能。
### 使用示例
下面分别给出两个简单的例子展示如何创建并操作这两种类型的对象:
#### Multiset 示例
```cpp
#include <iostream>
#include <set>
int main(){
std::multiset<int> ms;
// 插入一些整数到 multiset 中
ms.insert(1);
ms.insert(2);
ms.insert(2); // 可以插入相同的数值多次
auto count_ones = ms.count(1); // 统计特定元素的数量
auto count_twos = ms.count(2);
std::cout << "Number of ones: " << count_ones << "\n";
std::cout << "Number of twos: " << count_twos << "\n";
return 0;
}
```
#### Multimap 示例
```cpp
#include <iostream>
#include <map>
int main(){
std::multimap<char,std::string> mm;
// 向 multimap 添加若干字符-字符串 对
mm.emplace('A',"Apple");
mm.emplace('B',"Banana");
mm.emplace('B',"Berry"); // 相同 key 下可以有不同 value
for(const auto& pair : mm){
std::cout<<pair.first<<" -> "<<pair.second<<"\n";
}
return 0;
}
```
这两个容器都提供了丰富的成员函数来进行增删查改等基本操作,并且由于内部采用了平衡二叉搜索树作为底层数据结构,在大多数情况下能提供较好的时间复杂度表现。
阅读全文
相关推荐

















