概念
- map中所有元素都是pair, pair中第一个元素为key(键值),第二个元素为value(实值), 可以根据key值快速找到value值
- 插入的同时元素按照键值自动排序,也叫关联式容器,底层结构也是用二叉树实现。
- map和multimap 区别:
map不允许容器中有 重复key值 元素
multimap允许容器中有重复key值元素
构造
//注意因为是对组,所以需要两个值
map<T1, T2> mp;
//map默认构造函数: map<int,int>m;
map(const map &mp);
//拷贝构造函数map<int, int>m2(m);
//赋值
map& operator=(const map &mp);
//重载等号操作符m3 = m2;
//遍历
for (map<int, int>::iterator it = m.begin(); it != m.end(); it++)
{
cout << "key = " << it->first << " value = " << it->second << endl;
}
大小和交换
size();
//返回容器中元素的数目m.size()
empty();
//返回bool类型 判断容器是否为空m.empty()
swap(st);
//交换两个集合容器m.swap(m2);
插入和删除
insert(elem);
//在容器中插入元素。
插入有如下四种方法,前三种对组的产生方法不同,第四种重载了[]进行操作。
老师不建议使用第四种插入,但可以通过[]与key配合查找value。
如果没有m[5],但程序中访问m[5],map会自动产生一个键值对key为5,value默认为0;
map<int, int> m; //构造
//第一种插入方式
m.insert(pair<int, int>(1, 10));
//第二种插入方式
m.insert(make_pair(2, 20));
//第三种插入方式
m.insert(map<int, int>::value_type(3, 30));
//第四种插入方式
m[4] = 40;
clear();
//清除所有元素m.clear();
erase(pos);
//删除pos迭代器所指的元素,返回下一个元素的迭代器。m.erase(m.begin());
erase(beg, end);
//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。m.erase(m.begin(),m.end());
erase(key);
//删除容器中值为key的元素。m.erase(3);
查找、统计、排序
find(key);
//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end();
count(key);
//统计key的元素个数
排序同set,需要在插入前进行设置,因为插入时就会自动默认从小到大排序
如果要改变插入的顺序,需要使用仿函数指定排序规则