map容器:
map中的所有元素都是pair;
pair中的第一个元素为key(键值),第二个元素为value
所有元素都会根据元素的键值自动排序
map和multimap是关联式容器,底层结构为二叉树
可以根据键值快速找到value值
map和multimap的区别:
map不允许有重复的key值
multimap允许有重复的key值元素
1.构造函数和赋值
map(T1,T2)mp | 默认构造函数 |
map(const map&mp) | 拷贝构造 |
map&operator=(const map &p) | 重载等号 |
代码实现:
添加数据有多种方法:
常用的有
1.pair<T1,T2>(elem1,elem2)
2.数组 map[n]=m;
3.map<T1.T2>::value_type(elem1,elem2)
void text()
{
//创建一个map容器
map<int, int>mp;
//添加数据
//1.匿名函数
mp.insert(pair<int, int>(1, 50));
//2.用 value_type
mp.insert(map<int,int>::value_type(2, 60));
//3.用数组方式
mp[3] = 80;
mp[4] = 40;
for (map<int, int>::iterator it = mp.begin(); it!= mp.end(); it++)
{
//输出方式
cout << (*it).first << " " << (*it).second << endl;
//cout<<it->frist<<" "<<it->second<<endl;
}
}
2.插入和删除
insert(elem) | 插入elem |
clear() | 清空 |
erase(pos) | 删除pos迭代器所指的元素,返回下一个元素迭代器 |
erase(beg,end) | 删除区间的所有元素,返回下一个元素迭代器 |
erase(key) | 删除容器中值为key的元素 |
3.大小和交换
size() | 元素个数 |
empty() | 判空 |
swap() | 交换 |
4.查找和统计
find(key) | 查找key,存在返回元素迭代器,不存在返回map.end() |
count(key) | 统计个数 |
5.排序 利用仿函数
//仿函数
class person {
public:
bool operator()(int a, int b)
{
return a > b;
}
};
void text()
{
//创建一个map容器
map<int, int,person>mp;
mp[1] = 20;
mp[2] = 20;
mp[3] = 80;
mp[4] = 40;
mp[5] = 20;
for (map<int, int>::iterator it = mp.begin(); it != mp.end(); it++)
{
cout << it->first << " " << it->second<< endl;
}
}