map/ multimap容器

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,不允许插入重复的
上一篇:转发-》c++ stl multimap基本操作使用技巧详细介绍


下一篇:Java之Google Guava使用举例