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;
}
相关推荐
2401_894915538 分钟前
GEO 搜索优化完整源码从零部署:环境配置、集群搭建全流程
开发语言·python·tcp/ip·算法·unity
颜x小2 小时前
[C#] C++与c#语法对比
开发语言·c++·c#
weixin_423652133 小时前
C#使用JObject
开发语言·c#
国科安芯3 小时前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
小poop3 小时前
轮转数组:从暴力到最优,一题掌握算法复杂度分析
数据结构·算法·leetcode
汉克老师4 小时前
GESP2026年3月认证C++八级( 第三部分编程题(2、子图最短路)精讲
c++·最短路·floyd·gesp8级
霸道流氓气质4 小时前
Java中集成Smile 技术教程:从入门到工程实践
java·开发语言
BerrySen1785 小时前
迈向 Next-Gen Java:企业级高并发架构演进与大模型 Agent 落地深度实战
java·开发语言·架构
abcd_zjq5 小时前
海康线扫相机使用
c++·海康
十五年专注C++开发5 小时前
C++设计一个函数来求容器元素绝对值之和的平均值
c++·模板·accumulate