#include <map>

map

\(map\)是一棵红黑树,它作为一个容器储存的是一个键值对另一个关键码的映射。必须要定义键值类型的小于号。

声明方法是:map<a,b> name;其中\(a\)\(b\)是数据类型,\(name\)是这棵红黑树的名字。

一般\(map\)都可以当做\(hash\)表来用,但是因为\(map\)内部是靠平衡树维护的,所以复杂度是\(O(log)\)的,比一般的手写\(hash\)要慢。但是\(map\)还支持中括号操作,所以一般情况下十分方便写。

声明方式

map<char,int> s;
map<char,int>::iterator it;

假设类型\(a\)\(char\),类型\(b\)\(int\),那么定义一个\(map\)和这个\(map\)的迭代器就是这样写。迭代器只支持访问连续地址,所以就只能\(++it\)\(--it\)。如果我用这个\(map\)来统计每个字符出现的次数,那么就可以直接写s[ch]++;

name.size()​

返回元素个数。

name.empty()​

判断\(map\)是否为空,为空则是逻辑真,否则就是逻辑假。

name.clear()​

清空\(map\)

name.begin()/name.end()​

返回\(map\)的首迭代器和尾迭代器。左闭右开,所以尾迭代器为空。

对迭代器解除引用后会得到一个\(pair\)

name.insert(pair<a,b>)/name.erase(pair<a,b>\(或迭代器\))​

插入一个\(pair\)类型,删除一个\(pair\)或者是迭代器。

name.find(x)​

返回一个迭代器,存的是一个第一关键字为\(x\)的二元组。若不存在,则返回\(name.end()\)

[]操作符

s[x]可以直接访问第一关键字与x相等的二元组的第二关键字。但是如果不存在\(map\)就会先新建一个二元组,使得这个新建的二元组第一关键字为x,第二关键字为\(0\)。所以在使用[]操作符之前最好先\(find\)一下以x为第一关键字的二元组是否存在,不然用多了就会出现大量的无用二元组。

posted @ 2018-11-01 15:29  AKMer  阅读(2700)  评论(0编辑  收藏  举报