C++教程-C++的map函数
![](https://wx.javatiku.cn/j/j301-t.jpg)
C++的map函数
map是C++的STL(标准模板库)的一部分。map是关联容器,存储排序的键值对,其中每个键都是唯一的,可以插入或删除,但不能更改。与键相关联的值可以更改。
例如:一个员工的map,其中员工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:要存储在map中的键的数据类型。
T:要存储在map中的值的数据类型。
compare:一个比较类,接受两个相同类型的参数,并返回一个值。此参数是可选的,默认值为二元谓词less<"key">。
alloc:分配器对象的类型。此参数是可选的,默认值为allocator。
创建一个map
可以使用以下语句轻松创建map:
typedef pair<const Key, T> value_type;
上述形式用于创建具有Key类型键和value_type类型值的map。一个重要的事情是,map的键和对应的值总是作为一对插入的,不能只插入键或值。
示例1
#include <string.h>
#include <iostream>
#include <map>
#include <utility>
using namespace std; int main()
{
map<int, string> Employees; // 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 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的所有成员函数列表:
构造函数/析构函数
函数 | 描述 |
---|---|
构造函数 | 构造map |
析构函数 | map析构函数 |
operator= | 将map的元素复制到另一个map中。 |
迭代器
函数 | 描述 |
---|---|
begin | 返回指向map中第一个元素的迭代器。 |
cbegin | 返回指向map中第一个元素的常量迭代器。 |
end | 返回指向past-the-end的迭代器。 |
cend | 返回指向past-the-end的常量迭代器。 |
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的元素。 |