C++ map函数
map是C++ STL(标准模板库)的一部分。map是关联容器,存储排序后的键值对,其中每个键都是唯一的,并且可以插入或删除,但不能修改。与键相关联的值可以更改。
例如: 员工的map,其中员工ID是键,姓名是值,可以表示为:
| Keys | Values |
|---|---|
| 101 | Nikita |
| 102 | Robin |
| 103 | Deep |
| 104 | John |
语法
template < class Key, // map::key_type
class T, // map::mapped_type
class Compare = less, // map::key_compare
class Alloc = allocator > // map::allocator_type
> class map;
参数
key: 要存储在映射中的键的数据类型。
type: 要存储在映射中的值的数据类型。
compare: 一个比较类,接受两个相同类型的参数,并返回一个值。该参数是可选的,默认值是二元谓词 less<“key”>。
alloc: 分配器对象的类型。该参数是可选的,默认值是 allocator 。
创建映射
可以使用以下语句轻松创建映射:
typedef pair value_type;
上述表单将用于创建一个键类型为 Key type ,值类型为 value type 的映射。一个重要的事情是,映射的键和对应的值总是作为一对插入的,你不能在映射中只插入键或只插入值。
示例1
#include
#include
#include
#include
using namespace std;
int main()
{
map 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::iterator ii=Employees.begin(); ii!=Employees.end(); ++ii)
{
cout << (*ii).first << ": " << (*ii).second << endl;
}
cout << endl << "Reverse Order:" << endl;
for( map::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的所有成员函数列表:
构造函数/析构函数
| 功能 | 描述 |
|---|---|
| 构造函数 | 构建地图 |
| 析构函数 | 地图析构函数 |
| 赋值运算符 | 将地图的元素复制到另一个地图中。 |
迭代器
| 功能 | 描述 |
|---|---|
| begin | 返回指向映射中第一个元素的迭代器。 |
| cbegin | 返回指向映射中第一个元素的常量迭代器。 |
| end | 返回指向末尾的迭代器。 |
| cend | 返回指向末尾的常量迭代器。 |
| rbegin | 返回指向末尾的反向迭代器。 |
| rend | 返回指向开头的反向迭代器。 |
| crbegin | 返回指向末尾的常量反向迭代器。 |
| crend | 返回指向开头的常量反向迭代器。 |
容量
| 函数 | 描述 |
|---|---|
| empty | 如果map为空,则返回true。 |
| size | 返回map中元素的数量。 |
| max_size | 返回map的最大大小。 |
元素访问
| 功能 | 描述 |
|---|---|
| operator[] | 检索具有给定键的元素。 |
| at | 检索具有给定键的元素。 |
修饰符
| 功能 | 描述 |
|---|---|
| 插入 | 将元素插入映射表中。 |
| 删除 | 从映射表中删除元素。 |
| 交换 | 交换映射表的内容。 |
| 清空 | 删除映射表的所有元素。 |
| 构造并插入 | 将新元素构造并插入映射表中。 |
| 构造并插入(按提示) | 按提示构造并插入新元素到映射表中。 |
观察者
| 函数 | 描述 |
|---|---|
| key_comp | 返回键值比较对象的副本。 |
| value_comp | 返回值比较对象的副本。 |
操作
| 功能 | 描述 |
|---|---|
| find | 搜索具有给定键的元素。 |
| count | 获取与给定键匹配的元素个数。 |
| lower_bound | 返回下界的迭代器。 |
| upper_bound | 返回上界的迭代器。 |
| equal_range | 返回与给定键匹配的元素范围。 |
分配器
| 函数 | 描述 |
|---|---|
| get_allocator | 返回一个用于构造映射的分配器对象。 |
非成员重载函数
| 函数 | 描述 |
|---|---|
| operator | 检查两个映射是否相等。 |
| operator!= | 检查两个映射是否不相等。 |
| operator< | 检查第一个映射是否小于第二个映射。 |
| operator<= | 检查第一个映射是否小于等于第二个映射。 |
| operator> | 检查第一个映射是否大于第二个映射。 |
| operator>= | 检查第一个映射是否大于等于第二个映射。 |
| swap() | 交换两个映射的元素。 |
极客笔记