map基本概念
简介:
在大量的数据中快速定位,
- map中所有元素都是pair(成对出现的)
- pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
- 所有元素都会根据元素的键值自动排序
本质:
- map/multimap属于关联式容器,底层结构是用二叉树实现。
优点:
- 可以根据key值快速找到value值
map和multimap区别:
- map不允许容器中有重复key值元素
- multimap允许容器中有重复key值元素
map构造和赋值
函数原型:
构造:
-
map<T1, T2> mp;
//map默认构造函数: -
map(const map &mp);
//拷贝构造函数
赋值:
-
map& operator=(const map &mp);
//重载等号操作符
示例:
#include <map>
map<int,int>m; //默认构造
map<int, int>m2(m); //拷贝构造
map<int, int>m3;
m3 = m2; //赋值
}
map大小和交换
函数原型:
-
size();
//返回容器中元素的数目 -
empty();
//判断容器是否为空 -
swap(st);
//交换两个集合容器
示例:
#include <map>
map<int, int>m;
m.empty();
map<int, int>m2;
m.swap(m2);
map插入和删除
函数原型:
-
insert(elem);
//在容器中插入元素。 -
clear();
//清除所有元素 -
erase(pos);
//删除pos迭代器所指的元素,返回下一个元素的迭代器。 -
erase(beg, end);
//删除区间[beg,end)的所有元素 ,返回下一个元素的迭代器。 -
erase(key);
//删除容器中值为key的元素。
示例:
#include <map>
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; //第四种插入方式,重载运算符,不建议,如果没有,会凭空创建一个没有的队组
//删除
m.erase(m.begin());
m.erase(3);
//清空
m.erase(m.begin(),m.end());
m.clear();
map查找和统计
函数原型:
-
find(key);
//查找key是否存在,若存在,返回该键的元素的迭代器;若不存在,返回set.end(); -
count(key);
//统计key的元素个数
示例:
#include <map>
//查找
map<int, int>::iterator pos = m.find(3); //返回的是map的迭代器
//统计
int num = m.count(3); //结果要么1要么0,因为是map,不允许插入重复的