C++常用STL容器--map&multimap

文章目录

    • 基本概念
    • map 构造、赋值
    • map 大小、交换
    • map 插入、删除
    • map 查找、统计
    • map 容器排序

基本概念

简介:

  • map中所有元素都是pair(对组)
  • pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
  • 所有元素都会根据元素的键值自动排序

本质:

  • map/multimap属于关联式容器,底层结构用二叉树实现

优点:

  • 可以根据key值快速找到value值

map和multimap区别:

  • map不允许容器中有重复key值元素,multimap允许有重复key值元素

map 构造、赋值

函数原型

构造:

  • map mp;//默认构造
  • map(const map &mp); //拷贝构造

赋值:

  • = //重载等号操作符

map 大小、交换

函数原型

  • .size();//返回容器中元素的数目
  • .empty();//判断容器是否为空
  • .swap(mp);//交换两个map容器

map 插入、删除

函数原型

插入:

  • .insert(pair(key,value));//插入键值对
  • .insert(make_pair(key,value))//插入键值对
  • mp[key]=value//向容器mp中插入键值对,没有value值也可以插入,过于强悍

删除:

  • .clear();//清除所有元素
  • .erase(pos);//删除指定pos位置的元素,返回下一个元素的迭代器
  • .erase(beg,end);//删除区间【beg,end)中的数据,返回下一个元素的迭代器
  • .erase(key);//删除值为key的元素

示例

mapm;

//1、第一种插入
m.insert(pair(1, 10));
//2、第二种插入
m.insert(make_pair(2, 20));
//3、第三种插入,不建议,过于强大,就算没有value值也能生成m[key]
m[3] = 30;

//删除
m.erase(m.begin());//删除指定位置的元素,这里删除第一个键值对
m.erase(2);	//按照key值删除,这里删除key值为2的键值对
m.erase(m.begin(), m.end());
m.clear();

注意: map不允许插入同样的key值,只保留第一次输入该key时对应的键值对


map 查找、统计

函数原型

  • .find(key);//查找key值是否存在,若存在,返回该值的元素的迭代器;若不存在,返回.end()
  • .count(key);//统计key的元素个数,map容器结果只有0或1,multimap可以有不同的值

示例

mapm;

//插入
m.insert(pair(1, 10));
m.insert(make_pair(2, 20));
m[3] = 30;

//查找
map::iterator pos = m.find(3);
if (pos != m.end()) {
	cout << "查到了元素key=" << (*pos).first<< "  value=" << pos->second << endl;
}
else {
	cout << "未找到元素" << endl;
}

//统计
int num = m.count(3);
cout << "num=" << num << endl;

map 容器排序

map容器默认排序规则为从小到大,可以利用仿函数来改变排序规则

示例

//仿函数,指定排序规则为从大到小
class MapCompare {
public:
	bool operator()(int v1, int v2) const{
		//降序
		return v1 > v2;
	}
};

mapm;		//传入自定义的仿函数,实现自定义排序
m.insert(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));
m[6] = 60;

for (map::iterator it = m.begin(); it != m.end(); it++) {
	cout << "key=" << it->first << " value=" << it->second << endl;
}

注意

  • 利用仿函数可以指定map容器的排序规则
  • 对于自定义数据类型,map必须要指定排序规则

你可能感兴趣的:(C++,STL,c++,容器)