C++中不得不说的map容器

本文深入探讨了C++ STL中的map容器,包括其基本概念、构造与赋值、大小和交换、插入与删除、查找与统计以及自定义排序等功能。map是一个关联容器,内部通过二叉树实现,允许快速根据key值查找value。文章通过实例代码展示了map的常用操作,并指出map与multimap的主要区别在于key值的唯一性。此外,还介绍了如何使用仿函数实现自定义排序规则。
摘要由CSDN通过智能技术生成

目录

1,map基本概念

2,map构造和赋值

3,大小和交换

4,插入和删除

5,查找和统计

6,排序


为什么这两天在研究C++的容器呢,因为刷题的时候碰见了几个不擅长的题,得用STL中的几种容器才能解出来,所以也是动力满满呀,希望能尽快转过头去把那几个题给写出来,哈哈哈,当然,解题思路和过程后续我也会分享出来。话不多说,老规矩,

使用map容器要包含头文件#include<map>

1map基本概念

简介:

  map中所有元素都是pair(成对出现的数)

  pair中第一个元素为key(键值),起到索引的作用,第二个元素为value(实值)

  所有的元素都会根据元素的键值自动排序

本质:

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

优点

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

mapmultimap的区别:

  map不允许容器中有重复的key值元素

  multimap允许容器中有重复的key值元素


2map构造和赋值

功能描述: 

  对map容器进行构造和赋值操作

代码实现:

#include<iostream>
#include<map>
using namespace std;
void printMap(map<int, int>& m)
{
	for (map<int, int>::iterator it = m.begin(); it != m.end(); it++) {
		cout << "key=" << (*it).first << " value=" << (*it).second << endl;
	}
	cout << endl;
}
void test01()
{
	//创建map容器 1,默认构造
	map<int, int>m;  //要写两个数据类型
	m.insert(pair<int, int>(1, 10));
	m.insert(pair<int, int>(3, 30));  //与插入的顺序无关
	m.insert(pair<int, int>(2, 20));  //容器会根据key值进行自动排序
	m.insert(pair<int, int>(4, 40));
	printMap(m);

	//2,拷贝构造
	map<int, int>m2(m);
	printMap(m2);

	//3,赋值
	map<int, int>m3;
	m3 = m2;  //等号方式赋值
	printMap(m3);
}
int main() {
	test01();
	return 0;
}

3,大小和交换

功能描述:

   统计map容器大小以及交换map容器

函数原型:

size(); //返回容器中元素的个数

empty(); //bool类型,判断容器是否为空

swap(st); //交换两个集合容器


4,插入和删除

功能描述:

  map容器进行插入和删除数据

代码实现:

#include<iostream>
#include<map>
using namespace std;
void test01()
{
	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(1); //按照key删除

	//第三种删除
	m.erase(m.begin(), m.end()); //区间删除

	//第四种删除
	m.clear(); //全部删除
}
int main() {
	test01();
	return 0;
}

5,查找和统计

功能描述:

  对map容器进行查找数据以及统计数据

函数原型:

  find(key);

/*查找key是否存在,若存在,返回该元素的迭代器;

若不存在,返回end()迭代器*/

  count(key);     // 统计key的元素个数

/*map不允许插入重复key值,count统计结果要么是0,要么是1

multimap的count统计结果可能大于1*/


6,排序

  map容器默认的排序方式是,按照key值进行从小到大的排序,但是我们可以利用仿函数实现从大到小排序,话不多说,直接上代码

#include<iostream>
#include<map>
using namespace std;
class MyCompare
{
public:
	bool operator()(int v1,int v2)const
	{
		return v1 > v2;  //降序
	}
};
void test01()
{
	map<int, int, MyCompare>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));
	for (map<int, int,MyCompare>::iterator it = m.begin(); it != m.end(); it++) {//输出的时候别忘了加上
		cout << "key=" << it->first << " value=" << it-> second << endl;
	}
}
int main() {
	test01();
	return 0;
}

另外,对于自定义数据类型,map必须要指定排序规则。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodingCaius

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值