菜鸟笔记
提升您的技术认知

C++ Multimap

阅读 : 2522

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的元素。