C++ map 使用方法及示例

map是 C ++ STL(标准模板库)的一部分。map是存储排序的键值对的关联容器,其中每个键都是唯一的,可以插入或删除,但不能更改。但是与键关联的值可以更改。

例如:一个员工map容器,其中员工ID是键,姓名是值,则可以表示为:

101Nikita
102Robin
103Deep
104John

语法

template < class Key,                     //map::key_type
           class T,                 //map::mapped_type
           class Compare = less,         //map::key_compare
           class Alloc = allocator<pair>    //map::allocator_type
           > class map;

参数

key:要存储在map中的键的数据类型。

type:要存储在map中的值的数据类型。

compare:一个比较类,它接受两个bool类型相同的参数,并返回一个值。此参数是可选的,二进制谓词less <“ key”>是默认值。

alloc:分配器对象的类型。此参数是可选的,默认值为分配器

创建 map

使用以下语句可以轻松创建map:

typedef pair<const Key, T> value_type;

上面的语句将用于创建一个键类型为Key类型,value值类型为 value_type的map重要的一点是,map的键和相应的值始终成对插入,您不能在map中仅插入键或仅插入值。

实例1

#include <string.h>  
#include <iostream>  
#include <map>  
#include <utility>  
using namespace std;  
int main()
{
   mapEmployees;
   // 1) 使用数组索引符号进行赋值
   Employees[101] = "Nikita";
   Employees[105] = "John";
   Employees[103] = "Dolly";
   Employees[104] = "Deep";
   Employees[102] = "Aman";
   cout << "Employees[104]=" << Employees[104] << endl << endl;
   cout << "Map 大小: " << Employees.size() << endl;
   cout << endl << "自然顺序:" << endl;
   for( map::iterator ii=Employees.begin(); ii!=Employees.end(); ++ii)
   {
       cout << (*ii).first << ": " << (*ii).second << endl;
   }
   cout << endl << "相反顺序:" << endl;
   for( map::reverse_iterator ii=Employees.rbegin(); ii!=Employees.rend(); ++ii)
   {
       cout << (*ii).first << ": " << (*ii).second << endl;
   }
}

输出:

Employees[104]=Deep

Map 大小: 5

自然顺序:
101: Nikita
102: Aman
103: Dolly
104: Deep
105: John

相反顺序:
105: John
104: Deep
103: Dolly
102: Aman
101: Nikita

成员函数

以下是map的所有成员函数的列表:

构造函数/析构函数

函数描述
constructors构造map
destructorsmap析构函数
operator=将map元素复制到另一个map容器。

迭代器

函数描述
begin返回指向map中第一个元素的迭代器。
cbegin返回指向map中第一个元素的const迭代器。
end返回指向末尾的迭代器。
cend返回指向末尾的常量迭代器。
rbegin返回指向末尾的反向迭代器。
rend返回指向起点的反向迭代器。
crbegin返回指向末尾的常量反向迭代器。
crend返回指向起点的常量反向迭代器。

容量

函数描述
empty如果map为空,则返回true。
size返回map中的元素数。
max_size返回map的最大容量。

元素访问

函数描述
operator[]用给定的键检索元素。
at用给定的键检索元素。

修饰符

函数描述
insert在map中插入元素。
erase从map上擦除元素。
swap交换map内容。
clear删除map的所有元素。
emplace构造新元素并将其插入map。
emplace_hint通过提示构造新元素并将其插入map。

观测器

函数描述
key_comp返回键比较对象的副本。
value_comp返回值比较对象的副本。

操作方式

函数描述
find搜索具有给定键的元素。
count获取与给定键匹配的元素数。
lower_bound返回迭代器的下限。
upper_bound返回一个迭代器到上限。
equal_range返回与给定键匹配的元素范围。

分配器

函数描述
get_allocator返回用于构造map的分配器对象。

非成员重载函数

函数描述
operator==检查两个map是否相等。
operator!=检查两个map是否相等。
operator<检查第一个map是否小于其他map。
operator<=检查第一个map是否小于或等于其他map。
operator>检查第一个map是否大于其他map。
operator>=检查第一个map是否大于其他map。
swap()交换两个map的元素。