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;
}
相关推荐
15Moonlight1 天前
09-MySQL内外连接
数据库·c++·mysql
无知就要求知1 天前
golang封装可扩展的crontab
开发语言·后端·golang
weixin_467209281 天前
Qt Creator打开项目提示no valid settings file could be found
开发语言·qt
mit6.8241 天前
归并|线段树|树状数组
c++
国服第二切图仔1 天前
Rust开发之使用match和if let处理Result错误
开发语言·网络·rust
2501_938773991 天前
从字节码生成看 Lua VM 前端与后端协同:编译器与执行器衔接逻辑
开发语言·前端·lua
huangql5201 天前
Nginx 从零到精通 - 最详细的循序渐进教程
开发语言·网络·nginx
xlq223221 天前
10.string(上)
开发语言·c++
2501_938773991 天前
深度对比 ArrayList 与 LinkedList:从底层数据结构到增删查改的性能差异实测
数据结构
合作小小程序员小小店1 天前
舆情,情感微博系统demo,基于python+qt+nlp,开发语言python,界面库qt,无数据库版,数据来自第三方网站获取,
开发语言·pytorch·qt·自然语言处理·nlp