目录
一、基本概念
1、map中所有元素都是pair(成对出现的)
2、pair中的第一个元素为key(键值)起索引作用,第二个元素为value(实值)
3、所有元素都会根据元素键值自动排序
4、属于关联式容器,底层结构是用二叉树实现
5、map和multimap的区别:
①map不允许容器有重复的key值元素
②multimap允许容器有重复的key值元素
二、构造和赋值
map <key值数据类型,value数据类型> mp;
#include <map>
map <int,int> mp;
//插入pair操作
mp.insert(pair<int,int>(1,10));
mp.insert(pair<int,int>(4,40));
mp.insert(pair<int,int>(3,30)); //按key值顺序排序输出
//拷贝构造
map <int,int> mp1(mp);
//赋值
map <int,int> mp2;
mp2 = mp;
三、大小和交换
//判空+大小
if(mp.empty())
cout << "m为空" << endl;
else
cout << "m的大小:" << mp.size() << endl;
//交换
map <int,int> m1;
m1.insert(pair <int,int>(1,10));
m1.insert(pair <int,int>(2,20));
m1.insert(pair <int,int>(3,30));
map <int,int> m2;
m2.insert(pair <int,int>(4,40));
m2.insert(pair <int,int>(5,50));
m2.insert(pair <int,int>(6,60));
m1.swap(m2);
printMap(m1);
printMap(m2);
打印函数printMap():
void printMap(map<int,int>&m)
{
map<int,int>::iterator it;
for(it = m.begin();it != m.end();it++)
cout << "key=" << it->first << "value=" << it->second <<endl;
cout << endl;
}
迭代器iterator
1、通过迭代器可以在不了解容器内部原理的情况下遍历容器
2、begin成员返回指向第一个元素的迭代器,而end成员返回指向容器尾元素的下一个位置的迭代器,也就是说end指示的是一个不存在的元素
1) 正向迭代器,定义方法如下: 容器类名::iterator 迭代器名; 2) 反向迭代器,定义方法如下: 容器类名::reverse_iterator 迭代器名;
四、插入和删除
//插入
mp.insert(pair<int,int>(1,10));
mp.insert(make_pair(1,10));
mp[1] = 10; //不建议插入式用这一种 利用key访问到value
//删除
mp.erase(mp.begin());
mp.erase(1); //按照key值删除
mp.erase(mp.begin(),mp.end());
mp.clear(); //一样的
五、查找和统计
//查找
map<int,int>m;
m.insert(pair<int,int>(1,10));
m.insert(pair<int,int>(2,20));
m.insert(pair<int,int>(3,30));
//m.find()返回的是迭代器
map<int,int>::iterator pos = m.find(3);
if(pos != m.end) //如果迭代器没遍历到最后 说明查到了
cout << "查到了元素 key=" << pos->first << value= << pos->second;
else
cout << "未找到元素" << endl;
//统计
//map不允许插入重复key元素 对count统计而言 结果要么是0要么是1
//multimap的count统计可能大于1
int num = m.count(3);
cout << "num = " << num << endl;
六、排序
map容器默认排序是按照key值从小到大排序,掌握如何改变排序规则
//仿函数 不是函数 是一个类
class Mycompare
{
public:
bool operator()(int v1,int v2) const
{
//降序
return v1 > v2;
}
};
int main()
{
map <int, int, Mycompare>m;
m.insert(make_pair(1,10));
m.insert(make_pair(2,20));
m.insert(make_pair(3,30));
m.insert(make_pair(4,40));
m.insert(make_pair(5,50));
map<int, int, Mycompare>::iterator it;
for(it = m.begin();it != m.end();it++)
cout << "key=" << it->first << "value=" << it->second <<endl;
cout << endl;
}