目录
一、基本概念
二、构造和赋值
三、大小和交换
迭代器iterator
四、插入和删除
五、查找和统计
六、排序
1、map中所有元素都是pair(成对出现的)
2、pair中的第一个元素为key(键值)起索引作用,第二个元素为value(实值)
3、所有元素都会根据元素键值自动排序
4、属于关联式容器,底层结构是用二叉树实现
5、map和multimap的区别:
①map不允许容器有重复的key值元素
②multimap允许容器有重复的key值元素
map
mp;
#include
//判空+大小
if(mp.empty())
cout << "m为空" << endl;
else
cout << "m的大小:" << mp.size() << endl;
//交换
map m1;
m1.insert(pair (1,10));
m1.insert(pair (2,20));
m1.insert(pair (3,30));
map m2;
m2.insert(pair (4,40));
m2.insert(pair (5,50));
m2.insert(pair (6,60));
m1.swap(m2);
printMap(m1);
printMap(m2);
打印函数printMap():
void printMap(map&m)
{
map::iterator it;
for(it = m.begin();it != m.end();it++)
cout << "key=" << it->first << "value=" << it->second <
迭代器iterator
1、通过迭代器可以在不了解容器内部原理的情况下遍历容器
2、begin成员返回指向第一个元素的迭代器,而end成员返回指向容器尾元素的下一个位置的迭代器,也就是说end指示的是一个不存在的元素
1) 正向迭代器,定义方法如下: 容器类名::iterator 迭代器名; 2) 反向迭代器,定义方法如下: 容器类名::reverse_iterator 迭代器名;
//插入
mp.insert(pair(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(); //一样的
//查找
mapm;
m.insert(pair(1,10));
m.insert(pair(2,20));
m.insert(pair(3,30));
//m.find()返回的是迭代器
map::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 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::iterator it;
for(it = m.begin();it != m.end();it++)
cout << "key=" << it->first << "value=" << it->second <