C++ map容器

通俗一点讲map其实就是python的字典(学会python字典 == c++_map)!!!

map和unordered_map都是C++中的关联容器,用于存储键值对。其主要区别在于底层实现方式和性能表现。

1、底层实现方式

map内部使用红黑树(一种自平衡二叉查找树)来实现,而unordered_map则使用哈希表来实现。这意味着,在map中,元素是按照键的大小进行有序排列的,而在unordered_map中,则不保证元素的顺序。

2、性能表现

当需要有序地遍历元素时,map的性能比unordered_map更好。但是,当需要快速查找特定的元素时,unordered_map通常比map更快。原因在于,map在插入和删除操作时需要维护红黑树的平衡,而unordered_map则只需要计算哈希值并将元素放入相应的桶中即可。

3、用途

由于map可以保证元素的有序性,所以适合用于需要有序的情况下,例如按照键排序输出元素、寻找最小值/最大值等。而unordered_map则适合用于需要快速查找元素的情况下,例如查找是否存在某个键值对、统计某个值出现的次数等。

总之,选择map还是unordered_map取决于具体的需求。如果需要有序地处理元素,则应该使用Map;如果需要快速查找元素,则可以使用unordered_map。

1.写入数据 && 读取数据

cpp 复制代码
#include <iostream>
#include <algorithm>
#include <map>
#include <unordered_map>
using namespace std;

map<string,int> vm;

int main()
{
	// 插入数据
	// key = age  value = 18
	//方法1
	vm["age"] = 18; 
	//方法2
	vm.insert(pair<string,int>("id",123456));
	
	//读取数据
	//方法1
	map<string,int>::iterator it;
	
	for(it = vm.begin();it!=vm.end();it++)
	{
		cout<<it->first<<" "<<it->second<<endl;
	}
	
	//方法2
	for(auto it = vm.begin();it!=vm.end();it++)
	{
		cout<<it->first<<" "<<it->second<<endl;
	}
	
	//方法3
	
	for(auto it:vm)
	{
		cout<<it.first<<" "<<it.second<<endl;
	}
	
	return 0;
}

2.删除数据

cpp 复制代码
#include <iostream>
#include <map>
#include <algorithm>

using namespace std;

map<string,int> vm = {{"xxw",18},{"xm",19},{"bj",14}};

int main()
{
	// 删除指定元素
	map<string,int>::iterator t1;
	t1 = vm.find("xm"); // "xm"为key
	vm.erase(t1);
	
	
	for(auto it:vm)
		cout<<it.first<<" "<<it.second<<endl;

	return 0;
}

3.查找 && 删除

cpp 复制代码
#include <iostream>
#include <unordered_map>
#include <algorithm>
using namespace std;

unordered_map<string, int> vmu = {{"xxw", 18}, {"asd", 19}, {"rty", 45}};

int main() 
{
	// 查找
	unordered_map<string, int>::iterator it;

	string name;
	printf("请输入要查早的key:");
	cin >> name;

	it = vmu.find(name);

	if (it != vmu.end()) {
		cout << "找到了\n";
	} else {
		cout << "抱歉 没找到!" << endl;
	}
	
	printf("-----------------------------------\n");
	//删除_直接通过key来删除
	
	vmu.erase("xxw");
	
	printf("删除之后:\n");
	for(auto it:vmu)
		cout<<it.first<<" "<<it.second<<endl;
	
	return 0;
}
相关推荐
我材不敲代码36 分钟前
Python实现打包贪吃蛇游戏
开发语言·python·游戏
身如柳絮随风扬2 小时前
Java中的CAS机制详解
java·开发语言
-dzk-3 小时前
【代码随想录】LC 59.螺旋矩阵 II
c++·线性代数·算法·矩阵·模拟
韩立学长3 小时前
【开题答辩实录分享】以《基于Python的大学超市仓储信息管理系统的设计与实现》为例进行选题答辩实录分享
开发语言·python
froginwe113 小时前
Scala 循环
开发语言
m0_706653234 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你914 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
Bruk.Liu4 小时前
(LangChain实战2):LangChain消息(message)的使用
开发语言·langchain
qq_423233904 小时前
C++与Python混合编程实战
开发语言·c++·算法
m0_715575344 小时前
分布式任务调度系统
开发语言·c++·算法