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, //map::key_compare class Alloc = allocator<pair> //map::allocator_type > class map;
key:要存储在map中的键的数据类型。
type:要存储在map中的值的数据类型。
compare:一个比较类,它接受两个bool类型相同的参数,并返回一个值。此参数是可选的,二进制谓词less <“ key”>是默认值。
alloc:分配器对象的类型。此参数是可选的,默认值为分配器
使用以下语句可以轻松创建map:
typedef pair<const Key, T> value_type;
上面的语句将用于创建一个键类型为Key类型,且value值类型为 value_type的map。重要的一点是,map的键和相应的值始终成对插入,您不能在map中仅插入键或仅插入值。
#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 |
destructors | map析构函数 |
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的元素。 |