Multimap是 C++ STL(标准模板库)的一部分。 Multimap 地图是类似的容器,例如存储排序的键值对的地图,但是与仅存储唯一键的地图不同, multiset 地图可以具有重复的键。默认情况下,它使用 < 运算符比较键。 例如: 员工年龄为键且名称为值的雇员Multimap可以表示为:
| 键 |
值 |
| 23 |
Nikita |
| 28 |
Robin |
| 25 |
Deep |
| 25 |
Aman |
Multimap员工有重复的密钥年龄。
语法
template < class Key, // multimap::key_type
class T, // multimap::mapped_type
class Compare = less<Key>, // multimap::key_compare
class Alloc = allocator<pair<const Key,T> > // multimap::allocator_type
> class multimap;
参数
key: 要存储在Multimap中的密钥数据类型。 type: 要存储在Multimap中的值的数据类型。 compare: 比较类,它接受两个相同类型的布尔变量,并返回一个值。该参数是可选的,二进制谓词less <” key”>是默认值。 alloc : 分配器对象的类型。此参数是可选的,默认值为分配器
创建multimap
可以使用以下语句轻松创建Multimap:
typedef pair<const Key, T> value_type;
上面的表格将用于创建键类型为 Key_type 和值类型为 value_type 的Multimap。重要的一点是, multiset 映射的键和相应的值始终成对插入,不能在 multiset 映射中仅插入键或仅插入值。
示例
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
multimap<string, string> m = {
{"India","New Delhi"},
{"India", "Hyderabad"},
{"United Kingdom", "London"},
{"United States", "Washington D.C"}
};
cout << "Size of map m: " << m.size() <<endl;
cout << "Elements in m: " << endl;
for (multimap<string, string>::iterator it = m.begin(); it != m.end(); ++it)
{
cout << " [" << (*it).first << ", " << (*it).second << "]" << endl;
}
return 0;
}
输出:
Size of map m: 4
Elements in m:
[India, new Delhi]
[India, Hyderabad]
[United Kingdom, London]
[United States, Washington D.C]
成员函数
以下是Multimap的所有成员函数的列表:
| 功能 |
说明 |
| 构造函数 |
构造Multimap |
| 析构函数 |
Multimap析构函数 |
| operator = |
将Multimap的元素复制到另一个Multimap。 |
迭代器
| 功能 |
说明 |
| begin |
返回指向 multiset 映射中第一个元素的迭代器。 |
| cbegin |
返回指向 multiset 映射中第一个元素的const_iterator。 |
| end |
返回指向末尾的迭代器。 |
| cend |
返回一个指向末尾的常量迭代器。 |
| rbegin |
返回指向结尾的反向迭代器。 |
| rend |
返回指向起点的反向迭代器。 |
| crbegin |
返回一个指向末尾的常量反向迭代器。 |
| credit |
返回指向起点的常量反向迭代器。 |
容量
| 功能 |
说明 |
| empty |
如果Multimap为空,则返回true。 |
| size |
返回Multimap中的元素数量。 |
| max_size |
返回Multimap的最大尺寸。 |
修饰符
| 功能 |
说明 |
| insert |
将元素插入Multimap。 |
| erase |
从 multiset 地图中擦除元素。 |
| swap |
交换Multimap的内容。 |
| clear |
删除Multimap的所有元素。 |
| emplace |
构造新元素并将其插入Multimap。 |
| emplace_hint |
通过提示构造新元素并将其插入Multimap。 |
观察者
| 功能 |
说明 |
| key_comp |
返回键比较对象的副本。 |
| value_comp |
返回值比较对象的副本。 |
操作
| 功能 |
说明 |
| 找到 |
搜索具有给定键的元素。 |
| 计数 |
获取与给定键匹配的元素数。 |
| lower_bound |
将迭代器返回到下限。 |
| upper_bound |
将迭代器返回上限。 |
| equal_range() |
返回与给定键匹配的元素的范围。 |
分配器
| 功能 |
说明 |
| get_allocator |
返回用于构造Multimap的分配器对象。 |
非成员重载函数
| 功能 |
说明 |
| operator== |
检查两个Multimap是否相等。 |
| operator!= |
检查两个Multimap是否相等。 |
| operator< |
检查第一个Multimap是否小于其他Multimap。 |
| operator<= |
检查第一个Multimap是否小于或等于其他。 |
| operator> |
检查第一个Multimap是否大于其他Multimap。 |
| operator>= |
检查第一个Multimap是否大于其他图。 |
| swap() |
交换两个Multimap的元素。 |