C++学习:map

本文介绍了C++中的map,multimap和unordered_map容器,重点讲解了它们的结构、排序方式、时间复杂度以及示例代码,展示了如何使用它们进行元素的插入、查找、删除和遍历。
摘要由CSDN通过智能技术生成

1.map

map是一种关联容器,用于存储一组键值对(key-value pairs),其中每个键(key)都是唯一的。
map容器根据键来自动进行排序,并且可以通过键快速查找对应的值。
map容器使用红黑树(Red-Black Tree)数据结构来实现,具有较快的插入、删除和査找操作的时间复杂度O(log n)。

image-20240219215119246count:一般用来判断key是否存在

2.multimap

不怎么用

multimap是一种关联容器,类似于map,但允许存储多个具有相同键的键值对。
multimap容器根据键来自动进行排序,并且可以通过键快速查找对应的值。
multimap容器使用红黑树(Red-Black Tree)数据结构来实现,具有较快的插入、删除和査找操作的时间复杂度。

image-20240219215800862

3.unordered_map

unordered_map是一种关联容器,用于存储一组键值对(key-value pairs),其中每个键(key)都是唯一的与map
和multimap不同,unordered_map不会根据键的顺序进行排序,而是使用哈希函数将键映射到存储桶中。
这使得unordered map具有更快的插入、删除和査找操作的时间复杂度,但不保证元素的顺序。

image-20240219220103036

unordered_map拥有极好的平均时间复杂度和极差的最坏时间复杂度,所以他的时间复杂度是不稳定的。一般情况下我们更愿意使用复杂度稳定的map而不是unordered _map。

4.示例代码

#include <iostream>
#include <map>
using namespace std;
int main() {
	// 创建并初始化map
	map<int, string>myMap = { {1,"Apple"},{2,"Banana"},{3,"orange"} };
	// 插入元素
	myMap.insert(make_pair(4, "Grapes"));
	// 查找和访问元素
	cout << "Value at key 2:" << myMap[2] << endl;
	// 遍历并打印 map 中的元素
	for (const auto& pair : myMap) {
		cout << "Key: " << pair.first << " ,Value:" << pair.second << endl;
	}
	// 删除元素
	myMap.erase(3);
	// 判断元素是否存在
	if (myMap.count(3) == 0) {
		cout << "Key 3 not found." << endl;
	}
	// 清空 map
	myMap.clear();
	// 判断 map 是否为空
	if (myMap.empty()) {
		cout << "Map is empty." << endl;
	}
	return 0;
}
#include <iostream>
#include <map>
using namespace std;
int main() {
	//创建并初始化 multimap
	multimap <int, string> myMultimap = { {1,"Apple"},{2,"Banana"},{2,"Orange"} };
	//插入元素
	myMultimap.insert(make_pair(3, "Grapes"));
	// 查找和访问元素
	auto range = myMultimap.equal_range(2);
	for (auto it = range.first; it != range.second; ++it)
	{
		cout << "Key:" << it->first << ",Value:" << it->second << endl;
	}
	//遍历并打印 multimap 中的元素
	for (const auto& pair : myMultimap) {
		cout << "key:" << pair.first << ",Value:" << pair.second << endl;
		// 删除元素
		myMultimap.erase(2);
		// 判断元素是否存在
		if (myMultimap.count(2) == 0) {
			cout << "Key 2 not found."<< endl;}
				// 清空 multimap
				myMultimap.clear();
			// 判断 multimap 是否为空	
			if (myMultimap.empty()) {
				cout << "Multimap is empty." << endl;
			}
			return 0;
		}

equal_range函数用于在关联容器中查找与指定键匹配的所有元素的范围。对于 multimap,它可能包含多个具有相同键的元素,因此 equal_range 可以用来获取所有这些元素的范围。

在这种情况下,auto range = myMultimap.equal_range(2); 返回一个迭代器对,其中 range.first 是指向第一个键为 2 的元素的迭代器,range.second 是指向最后一个键为 2 的元素的下一个迭代器。

使用 equal_range 的主要优势是它可以更有效地找到具有相同键的所有元素,而不需要进行多次搜索。这在处理大型容器时可以提高效率。

向最后一个键为 2 的元素的下一个迭代器。

使用 equal_range 的主要优势是它可以更有效地找到具有相同键的所有元素,而不需要进行多次搜索。这在处理大型容器时可以提高效率。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值