C++ Map
映射是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。 |
迭代器
容量
元素访问
修饰符
观察者
功能 |
说明 |
key_comp |
返回键比较对象的副本。 |
value_comp |
返回值比较对象的副本。 |
操作
功能 |
说明 |
find |
搜索具有给定键的元素。 |
count |
获取与给定键匹配的元素数。 |
lower_bound |
将迭代器返回到下限。 |
upper_bound |
将迭代器返回上限。 |
equal_range |
返回与给定键匹配的元素的范围。 |
分配器
功能 |
说明 |
get_allocator |
返回用于构造映射的分配器对象。 |
非成员重载函数
功能 |
说明 |
operator == |
检查两个地图是否相等。 |
operator!= |
检查两个地图是否相等。 |
operator |
检查第一张地图是否小于其他地图。 |
operator <= | 检查第一张地图是否小于或等于其他地图。 |
operator> |
检查第一张地图是否大于其他地图。 |
operator>= |
检查第一张地图是否大于其他地图。 |
swap() |
交换两个地图的元素。 |