简介
在 C++ 中,multimap
是标准库中的一个关联容器,它包含键值和映射值对,并且允许多个元素具有相同的键。multimap
自动将其元素保持在排序顺序中,基于键的比较,这使得它非常适合用于需要存储一系列与单个键相关联的值的情况。
具体使用
创建
std::multimap<DataType, DataType> mm;
和map
创建相同,DataType
是数据类型。
插入元素
insert函数
multimap使用insert函数进行元素插入,支持单个元素和多个元素插入;
单个元素
// 方式一
mm.insert({data, data});
// 方式二
mm.insert(make_pair(data, data));
范围插入
std::multimap<int, int> srcMap = {{1,1},{1,2}};
mm.insert(srcMap.begin(), srcMap.end());
emplace函数
mm.emplace(4, 4);
insert和emplace的区别
insert
是先构造元素,然后在插入。emplace
是直接在容器内部构造元素。
查找元素
find函数
multimap
允许有多个相同键的元素。find
函数仅返回第一个匹配键的迭代器,如果找不到任何匹配键的元素,则返回end()迭代器。
auto it = mm.find(3);
equal_range函数
auto it = mm.equal_range(3);
for(auto item = it.frist; it.frist != it.second; it.frist++)
{
cout<<item->first<<item->second<<endl;
}
std::multimap
的 equal_range()
成员函数返回一个包含两个迭代器的 std::pair 对象。这两个迭代器分别指向容器中键值等于指定键的第一个元素和最后一个元素之后的位置。当最后一个元素匹配时,second
指向end();
删除元素
erase函数
使用erase
删除所有匹配键的元素
mm.erase(1); // 删除所有键为1的元素
使用erase
删除迭代器指向的元素
mm.erase(it); // it是迭代器指针 删除it指向的元素
扩展
multimap 的内部实现通常基于红黑树这种平衡二叉搜索树,搜索、插入和删除的时间复杂度为O(log N)。