STL map和unordered_map容器详解

一、map

包含头文件#include<map>

map是C++标准模板库的一个关联容器,提供一对一的映射关系。
“第一个”称为关键字(key),别名是first,每个关键字只能在map中出现一次。
“第二个”称为该关键字的值“value”,别名是second。
它的底层就是pair容器。

在map内部所有的数据都是有序的,因为map是由一颗红黑树实现的,这棵树具有对数据自动排序的功能。(可以对比unordered_map容器)

map<string,int>friends;       //定义

friends.insert({"Alice","1382321"});    //加入map容器中 1

friends.insert(pair<string,int>("Bob",12334));   //加入map容器中 2

friends["jake"]=73423;                    //可以直接这样加入 3

friends.erase("Alice");              //删除关键字为"Alice"的元素

friends.count("Alice");            //返回关键字为"Alice"的数量,由于关键字唯一,所以只返回0和1

friends.size();                       //返回所有键对值的数量

friends.clear();                     //清除所有的键对值

常用的相关操作:

1、

if(friends.count("Alice"))                 //查找关键字为"Alice"的键值
cout<<friends["Alice"];
else cout<<"not found";

2、

for(auto it=friends.begin();it!=friends.end();++it)   //遍历
{
   cout<<it->first<<" "<<it->second<<endl;
}

map操作的相关例子:

map<int,int>friends;      //如果没有关键字,那么它的值为0

friends[10]=3;    //定义

friends[10]++;    //此时friends[10]的值变为4

friends[20]++;    //这里没有关键字为20的元素,所以这里相当于创建一个关键字为20,且值从0变为1的元素

二、unordered_map

包含头文件#include<unordered_map>

unordered_map是用哈希表来实现的,不会像 map 容器那样对存储的数据进行排序。有些情况是不需要顺序的,所以我们使用unorder_map会更优,时间复杂度会低一点。

unordered_map在平均情况下具有常数时间的查找复杂度,而map则具有对数时间的查找复杂度。由于unordered_map是基于哈希表实现的,它的插入和查找时间都可以近似看作O(1),相对于map更快。而map基于红黑树实现,插入和删除时间均为O(log(n))。

它的操作和map是一模一样的。

unordered_map操作的相关例子:

#include<unordered_map>
unordered_map<char,int>m; 

m['a']=9; 
m['?']=5; 
m['z']=99; 
m['A']=50; 
m['Z']=-2; 
m[' ']=0; 
cout <<m.size() <<endl;   
if (m.count('?')== 1)
cout <m['?']<<endL;      

for (auto it =m.begin();it!=m.end();++it)
{ 
cout <<it->first <" "<<it->second<<endl;
}

总结:

如果需要对键值对进行排序并遍历,选择map是更合适的;而对于大量数据的查找和插入操作,选择unordered_map 可以更快地完成相应的操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值