[STL] map
属性
- 声明形式
map<Key, Data, Compare, Alloc>
//第三个是比较函数,第四个是分配器。
- 头文件
#include<map>
- 迭代
for(map<string, int>::iterator p = f.begin(); p != f.end(); p ++)
cout << p -> first << '=' << p -> second << endl;
map内置元素是pair类型。
- 比较运算符
对于 STL 中的 map,我们经常使用时,key_type 经常是基本类型,因此编译器自带比较函数可以比较元素大小,从而建立红黑树,从map的头开始顺序地读取数据,其数据的顺序将不同于你插入时候的顺序。
比如<string, int> f
依次输入如下关系并插入
a 5
e 1
c 3
d 2
b 2
最后迭代的顺序会是
a=5
b=2
c=3
d=2
e=1
定义并赋值
- 构造函数
map<string, int> s;//普通定义
map<string, int> p(s);//拷贝s中的关系
map<string, int> p(s.begin(), s.end()) //区间构造函数
- 插入关系
数组插入
s["hello"] = 7;
insert函数
s.insert(make_pair("hello", 7));
s.insert(map<string, int>::value_type("hello", 7));
数组插入比较慢。
查询
- 下标查询
printf("%d", s["hello"]);
如果没有对应的键值会返回一个默认键。(int为0,string为空字符串)
- find函数
map<string, int>::iterator q = s.find("hello");
if(q == s.end())printf("NONE");
else cout << s -> first << '=' << s -> second << endl;
删除
- erase函数
s.erase(s.begin());//删除单个关系
s.erase(s.begin(), s.end());//删除区间内的关系
s.erase("hello");//删除单个关系
- clear函数
s.clear() = s.erase(s.begin(), s.end());
其他函数
- begin()
头部迭代器 - end()
尾部迭代器 - empty()
为空返回真 - key_comp()
返回key键值的比较函数 - swap()
交换两个map - max_size()
返回可以容纳的最大元素个数