C++中map与unordered_map, set与unordered_set

散列表和红黑树

哈希函数和散列表很普遍,在此就不介绍了。下面介绍一下红黑树的概念(代码太难了 溜了溜了 等我成为大佬再钻研)

红黑树的定义:

  • 每个节点非红即黑
  • 根节点是黑的;
  • 每个叶节点(叶节点即树尾端NULL指针或NULL节点)都是黑的;
  • 如图所示,如果一个节点是红的,那么它的两儿子都是黑的;
  • 对于任意节点而言,其到叶子点树NULL指针的每条路径都包含相同数目的黑节点;
  • 每条路径都包含相同的黑节点;

map

map是通过红黑树实现的,红黑树内的数据时有序的,在红黑树上查找的时间复杂度是O(logN),相对于unordered_map的查询速度有所下降,但额外空间开销减小。

插入

map有三种方式插入: 

  • pair 
  • make_pair
  • 大括号形式
map<int, int>mymap;
mymap.insert(pair<int,int>(num[i],1));
mymap.insert(make_pair(num[i], 1));
mymap.insert({num[i],1});

 访问映射

   访问映射合,直接用 [] 就能访问。比如 dict[“Tom”] 就可以获取 “Tom” 的班级了。而这里有一个比较神奇的地方,如果没有对 “Tom” 做过映射的话,此时你访问 dict[“Tom”] ,系统将会自动为 “Tom” 生成一个映射,其 value 为对应类型的默认值。并且我们可以之后再给映射赋予新的值,比如 dict[“Tom”] = 3 ,这样为我们提供了另一种方便的插入手段。

查找关键字 

find count

遍历映射

for(map<int, int>::iterator iter=mymap.begin();iter!=mymap.end();iter++)

 删除关键字

erase

underde_map

undered_map使用哈希表实现。unordered_map和map类似,都是存储的key-value的值,可以通过key快速索引到value。不同的是unordered_map不会根据key的大小进行排序,存储时是根据key的hash值判断元素是否相同,即unordered_map内部元素是无序的,而map中的元素是按照二叉搜索树存储,进行中序遍历会得到有序遍历。

集合

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值