c++STLmap/multimap容器

文章介绍了C++标准库中的map和multimap容器,它们是关联式容器,基于红黑树实现,用于存储键值对。map保证键值的唯一性,multimap则允许重复键值。内容包括pair的创建、map的插入、删除、查找、大小查询及交换操作,以及count方法用于统计键值出现的次数。
摘要由CSDN通过智能技术生成

map中所有的元素都是pair。
pair中第一个元素为key(键值),起到索引作用,第二个元素为value(实值)
所有元素会根据键值自动排序(从小到大)
map/multimap属于关联式容器,底层结构是用二叉树实现的。
优点:可以根据key值快速找到value值。
map和multimap区别(和set容器相似):map不允许有重复的key值元素,而multimap可以 。
pair对组的创建
成对出现的数据,利用对组可以返回两个数据
两种创建方式

void test01()
{
	pair<int, int>p(1, 2);
	cout << p.first << endl;//1
	cout << p.second << endl;//2
	pair<int, int>p2 = make_pair(1, 2);
	cout << p2.first << endl;//1
	cout << p2.second << endl;//2
	if (p == p2)
		cout << "p==p2" << endl;//p==p2
	else
		cout << "p!=p2" << endl;
}

两个对组相等key和value均相等。
map的构造和赋值

void print(const map<int, int>& m)
{
	for (map<int, int>::const_iterator it = m.begin(); it != m.end(); it++)
	{
		cout << it->first << " " << it->second << endl;
	}
}
void test02()
{
	map<int, int>m1;
	m1.insert(pair<int,int>(1, 2));//插入对组
	m1.insert(pair<int, int>(3, 36));
	m1.insert(pair<int, int>(5, 5));
	m1.insert(pair<int, int>(9, 7));
	m1.insert(pair<int, int>(10, 3));
	print(m1);
	/*1 2
	  3 36
	  5 5
	  9 7
	  10 3*/
	map<int, int>m2(m1);//拷贝构造
	print(m2);
	map<int, int>m3;
	m3 = m2;//重载等号
}

map容器大小和交换map容器

void test03()
{
	map<int, int>m1;
	m1.insert(pair<int, int>(1, 2));
	m1.insert(pair<int, int>(3, 36));
	m1.insert(pair<int, int>(5, 5));
	m1.insert(pair<int, int>(9, 7));
	m1.insert(pair<int, int>(10, 3));
	if (m1.empty())
		cout << "容器为空" << endl;
	else
		cout << "容器中的元素个数" << m1.size() << endl;//容器中的元素个数5

}

swap()内置函数交换两个容器。
map插入和删除

void test04()
{
	map<int, int>m1;
	m1.insert(pair<int, int>(1, 2));
	m1.insert(pair<int, int>(3, 36));
	m1.insert(pair<int, int>(5, 5));
	m1.insert(pair<int, int>(9, 7));
	m1.insert(pair<int, int>(10, 3));
	print(m1);
	map<int, int>::iterator it = m1.begin();
	m1.erase(it);//删去迭代器所指的元素,重载类型erase(beg,end),删除[beg,end]迭代器区间的元素,返回下一个元素的迭代器
	print(m1);
	m1.clear();//清空容器
	cout << "容器内的元素个数为:" << m1.size() << endl;
}

在这里插入图片描述
map查找和统计:

void test05()
{
	map<int, int>m1;
	m1.insert(pair<int, int>(1, 2));
	m1.insert(pair<int, int>(3, 36));
	m1.insert(pair<int, int>(5, 5));
	m1.insert(pair<int, int>(9, 7));
	m1.insert(pair<int, int>(10, 3));
	map<int, int>::iterator it = m1.find(5);
	if (it != m1.end())
		cout << it->second << endl;//5
	else
		cout << "未查找到此元素" << endl;
}

count(key)统计key的元素个数,map中为1或0,multimap可以为多个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值