9. map/multimap容器
9.1 map基本概念
简介:
- map中所有元素都是pair
- pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
- 所有元素都会根据元素的值自动排序
本质:
- map/multimap属于关联式容器,底层结构是用二叉树实现。
优点:
- 可以根据key值快速找到value值
map和multimap区别:
- map不允许容器中有重复的 key值元素
- multimap允许容器中有重复的key值元素
9.2 map构造和赋值
功能描述:
- 对map容器进行构造和赋值操作
函数原型:
构造:
mapmp;
//map默认构造函数
map(const map &mp);
//拷贝构造函数
赋值:
map& operator=(const map &mp);
//重载等号操作符
示例:
#include
using namespace std;
#include
运行结果:
m=
key= 1 value= 10
key= 2 value= 20
key= 3 value= 30
key= 4 value= 40
key= 5 value= 50
m2=
key= 1 value= 10
key= 2 value= 20
key= 3 value= 30
key= 4 value= 40
key= 5 value= 50
m3=
key= 1 value= 10
key= 2 value= 20
key= 3 value= 30
key= 4 value= 40
key= 5 value= 50
请按任意键继续. . .
总结:map中所有元素都是成对出现的,插入数据时候要使用对组
9.3 map大小和交换
功能描述:
- 统计map容器大小以及交换map容器
函数原型:
size();
empty();
swap(st);
示例:
#include
using namespace std;
#include
运行结果:
m1不为空,大小为:3
交换前:
key=:1 value=:10
key=:2 value=:20
key=:3 value=:30
key=:4 value=:40
key=:5 value=:50
key=:6 value=:60
交换后:
key=:4 value=:40
key=:5 value=:50
key=:6 value=:60
key=:1 value=:10
key=:2 value=:20
key=:3 value=:30
请按任意键继续. . .
9.4 map插入和删除
功能描述:
函数原型:
insert(elem);
clear();
//
erase(pos);
erase(beg,end);
erase(key);
示例:
#include
using namespace std;
#include
运行结果:
40
key=1 value=10
key=2 value=20
key=3 value=30
key=4 value=40
key=2 value=20
key=3 value=30
key=4 value=40
key=2 value=20
key=4 value=40
请按任意键继续. . .
总结:
- 插入---insert
- 删除---erase
- 清空---clear
9.5 map查找和统计
功能描述:
- 对map容器进行查找数据以及统计数据
函数原型:
find(key);
//查找key元素是否存在,返回该键元素的迭代器;若不存在,返回set.end();
count(key);
//统计key的元素个数
示例:
#include
using namespace std;
#include
运行结果:
查到了元素key = 3 value = 30
num=1
请按任意键继续. . .
总结:
- 查找---find(返回的是迭代器)
- 统计---count(对于map,结果是0或1)
9.6 map容器排序
学习目标:
- map容器默认排序规则为按照key值进行从大到小的操作,掌握如何改变排序规则
主要技术点:
- 利用仿函数,可以改变排序规则
示例:
#include
using namespace std;
#include
运行结果:
key = 1 value = 10
key = 2 value = 20
key = 3 value = 30
key = 4 value = 40
key = 5 value = 50
key = 5 value = 50
key = 4 value = 40
key = 3 value = 30
key = 2 value = 20
key = 1 value = 10
请按任意键继续. . .
总结:
- 利用仿函数可以指定map容器的排序规则
- 对于自定义数据类型,map必须要指定排序规则,同set容器