C++标准库容器:Map
#本博客主要简述了c++标准库容器Map的一些特性
- Map 的定义及特性
一个Map就是一个(关键码,值)对偶的序列,它提供基于关键码的快速提取操作。每个关键码至多保持一个值,换句话说,map中的关键码具有唯一性。
简单来说,map提供了一个映射关系来查找元素。
- Map的部分成员
成员 定义 备注 Key 关键码 T 关键码对应的元素 value_type 关键码和元素的类型 以pair的格式储存,即<type of key, type of T> iterator 双向迭代器 - Map的部分成员函数
成员函数类型 | 成员函数 | 功能 | 备注 |
---|---|---|---|
元素访问 | at | 访问指定元素,越界检查 | |
/ | [] | 可以“访问指定元素”,也可以“插入指定元素” | |
迭代器 | begin/end | 返回指向容器第一个/尾端的迭代器 | |
/ | rbegin/rend | 返回指向容器前端/最后元素的迭代器 | |
容量 | empty | 检查容器是否为空 | |
/ | size | 返回容纳元素数 | |
修改器 | clear | 清除内容 | |
/ | insert | 插入元素或节点 | |
/ | emplace | 原位构造元素 | |
/ | erase | 擦除元素 | |
/ | swap | 交换内容 | |
查找 | count | 返回匹配特定键的元素数 | |
/ | find | 寻找带有特定键的元素 | |
/ | equal_range | 返回匹配特定键的元素范围 |
-
关于map的迭代器
map中的每一个迭代器都是以pair<const key , const mapped type>为元素的序列上的迭代器。使用map的迭代器遍历时,依据map关键码的递增顺序给出元素。
对于任何pair,都可以用first, second 索引第一个和第二个元素。
for( map<string, number>:: const_iterator p=Map.begin() ; p!=Map.end() ; ++p)
cout<<p->first<<'\t'<<p->second;
-
关于map的下标
下标运算符将关键码作为下标执行查找,如果不存在这个关键码,就初始化这个关键码。
map的下标(关键码)必须能够找到,代价就是巨大的空间开销。每次查找map中的元素,时间复杂的是O(log(size_of_map)), 是和关键码的选择有关的。 -
关于map的比较
map的关键码必须可以比较,并且迭代器时以递增方式遍历迭代器。按默认规定,关键码的比较采用<(小于)。 -
映射操作
通过关键码获取信息:find函数
Map.find(k)产生指向关键码k的元素的迭代器,如果不存在该元素,则返回Map.end()
if(Map.find(k)!=Map.end)
cout<<Map.find(k)->second;//如果存在以k为关键码的元素,就输出元素的值