映射是C++ STL(标准模板库)的一部分。映射是存储排序的键值对的关联容器,其中每个键都是唯一的,可以插入或删除但不能更改。可以更改与键关联的值。 例如: 员工图,其中雇员ID是键,名称是值,可以表示为:
| 键 | 值 |
| 101 | Nikita |
| 102 | Robin |
| 103 | Deep |
| 104 | John |
语法
template < class Key, // map::key_type class T, // map::mapped_type class Compare = less<Key>, // map::key_compare class Alloc = allocator<pair<const Key,T> > // map::allocator_type > class map;
参数
Key: 要存储在地图中的键数据类型。 T: 要存储在地图中的值的数据类型。 Compare: 一个比较类,它接受两个相同类型的布尔变量,并返回一个值。此参数是可选的,二进制谓词less <“key”>是默认值。 alloc: 分配器对象的类型。此参数是可选的,默认值为分配器<value_type></value_type>
创建地图
可以使用以下语句轻松创建地图:
typedef pair<const Key, T> value_type;
上面的表格将用于创建具有 Key type 类型的键和 value type类型的值的地图。重要的一点是地图的键和相应的值始终成对插入,您不能在映射中仅插入键或仅插入值。
示例1
#include <string.h> #include <iostream> #include <map> #include <utility> using namespace std; int main() { map<int, string> Employees; // 1) Assignment using array index notation Employees[101] = "Nikita"; Employees[105] = "John"; Employees[103] = "Dolly"; Employees[104] = "Deep"; Employees[102] = "Aman"; cout << "Employees[104]=" << Employees[104] << endl << endl; cout << "Map size: " << Employees.size() << endl; cout << endl << "Natural Order:" << endl; for( map<int,string>::iterator ii=Employees.begin(); ii!=Employees.end(); ++ii) { cout << (*ii).first << ": " << (*ii).second << endl; } cout << endl << "Reverse Order:" << endl; for( map<int,string>::reverse_iterator ii=Employees.rbegin(); ii!=Employees.rend(); ++ii) { cout << (*ii).first << ": " << (*ii).second << endl; } }
输出:
Employees[104]=Deep Map size: 5 Natural Order: 101: Nikita 102: Aman 103: Dolly 104: Deep 105: John Reverse Order: 105: John 104: Deep 103: Dolly 102: Aman 101: Nikita
成员函数
以下是map的所有成员函数的列表:
构造函数/析构函数
| 功能 | 说明 |
| constructors | Construct map |
| destructors | Map destructor |
| operator= | 将Map的元素复制到另一个Map。 |
迭代器
| 功能 | 说明 |
| begin | 返回指向地图中第一个元素的迭代器。 |
| cbegin | 返回指向地图中第一个元素的const迭代器。 |
| end | 返回指向末尾的迭代器。 |
| cend | 返回一个指向末尾的常量迭代器。 |
| rbegin | 返回指向结尾的反向迭代器。 |
| rend | 返回指向起点的反向迭代器。 |
| crbegin | 返回一个指向末尾的常量反向迭代器。 |
| credit | 返回指向起点的常量反向迭代器。 |
容量
| 功能 | 说明 |
| empty | 如果地图为空,则返回true。 |
| size | 返回地图中的元素数量。 |
| max_size | 返回地图的最大尺寸。 |
元素访问
| 功能 | 说明 |
| operator[] | 使用给定的键检索元素。 |
| at | 使用给定的键检索元素。 |
修饰符
| 功能 | 说明 |
| insert | 在地图中插入元素。 |
| erase | 从地图上擦除元素。 |
| swap | 交换地图内容。 |
| clear | 删除地图的所有元素。 |
| emplace | 构造新元素并将其插入地图。 |
| emplace_hint | 通过提示构造新元素并将其插入地图。 |
观察者
| 功能 | 说明 |
| key_comp | 返回键比较对象的副本。 |
| value_comp | 返回值比较对象的副本。 |
操作
| 功能 | 说明 |
| find | 搜索具有给定键的元素。 |
| count | 获取与给定键匹配的元素数。 |
| lower_bound | 将迭代器返回到下限。 |
| upper_bound | 将迭代器返回上限。 |
| equal_range | 返回与给定键匹配的元素的范围。 |
分配器
| 功能 | 说明 |
| get_allocator | 返回用于构造映射的分配器对象。 |
非成员重载函数
| 功能 | 说明 |
| operator == | 检查两个地图是否相等。 |
| operator!= | 检查两个地图是否相等。 |
| operator | 检查第一张地图是否小于其他地图。 |
| operator <= | 检查第一张地图是否小于或等于其他地图。 |
| operator> | 检查第一张地图是否大于其他地图。 |
| operator>= | 检查第一张地图是否大于其他地图。 |
| swap() | 交换两个地图的元素。 |

菜鸟笔记