文档章节

map和unordered_map的使用(中级)

徐学良
 徐学良
发布于 2015/06/08 20:05
字数 235
阅读 84
收藏 0

map和unordered_map使用起来一样,但是unordered_map的性能比map要好非常多。

当我们需要一个有序的关联容器的时候,我们必须选择std::map,因为 unordered_map 内部元素不是有序的,这一点从名字都可以看出来,除此之外都应该选择 unordered_map 

头文件:

unordered_map     #include <unordered_map> 

map  不需要

使用:

定义map类型:typedef std::map<int, std::shared_ptr<A>> A_map;

                        A_map a_map;

查找并插入:

A_map::iterator iter = a_map.find(int_num);

if(iter ==a_map.end())
 {
  a_map.insert(std::make_pair(int_num, a_map_ptr));    //    a_map_ptr 必须是std::shared_ptr<A>类型的

}

查找并删除

A_map::iterator iter = a_map.find(int_num);

if(iter !=a_map.end())
 {
  a_map.erase(iter);

}

直接删除

a_map.erase(int_num);

清空

a_map.clear();


查找------------

A temp_a = a_map.find(int_num);

找不到新建

if(nullptr == temp_a)
 {
  temp_a.reset(new A());

a_map.insert(std::make_pair(int_num, temp_a));

 }

返回第二个元素的函数

std::shared_ptr<A> find_temp_a(const int &int num)
{

 A_map:iterator iter = a_map.find(int_num);
 if(iter != a_map.end())
 {
  return iter->second;
 }
 return nullptr;
}

© 著作权归作者所有

共有 人打赏支持
徐学良
粉丝 23
博文 213
码字总数 13841
作品 0
浦东
程序员
私信 提问
map和unordered_map

map 是有序的 内部通常是红黑树实现 unorderedmap 是无序的 内部是hash 所以unorderedmap 的插入查找删除速度比map快几倍,对数据的顺序没有要求时尽量用unorderedmap Note: erase的时候 为...

梦想游戏人
2016/04/06
158
0
Cocos2d-x3.0模版容器详解之二:cocos2d::Map

1.概述 版本: v3.0 beta 语言: C++ 定义在 “COCOS2DXROOT/cocos/base” 路径下的 "CCMap.h" 的头文件中。 ? cocos2d::Map<K,V> 是一个内部使用了 std::unorderedmap的关联容器模版。 std::u...

_子墨
2014/08/15
0
0
vector,map 注意事项

1.关于vector的越界访问: 首先以上的代码可以正确编译通过并运行的,不过list[5]是0,在vector中,如果通过[i]下标访问元素,是不会进行越界检查的。所以一般情况不要通过下标来直接访问,建...

lxfeng
2016/04/30
59
0
C++ STL----associative containers

Set: Sets are typically implemented as binary search trees. Therefore, the main characteristics of set as an associative container are: Unique element values: no two elements in......

zhujianbest
2010/06/08
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Confluence 6 教程:在 Confluence 中导航

当你对 Confluence 有所了解后,你会发现 Confluence 使用起来非常简单。这个教程主要是针对你使用的 Confluence 界面进行一些说明,同时向你展示在那里可以进行一些通用的任务和操作。 空间...

honeymose
今天
2
0
sed, awk 练习

1. sed打印某行到某行之间的内容 2. sed 转换大小写 将单词首字母转化大写 将所有小写转化大写 3. sed 在某一行最后面添加一个数字 4. 删除某行到最后一行 解析: {:a;N;$!ba;d} :a : 是...

Fc丶
今天
2
0
babel6升级到7,jest-babel报错:Requires Babel "^7.0.0-0", but was loaded with "6.26.3".

自从将前端环境更新到babel7,jest-babel之前是基于babel6的,执行时候就会报:Requires Babel "^7.0.0-0", but was loaded with "6.26.3". 很烦,因为连续帮好几台电脑修复这个问题,所以记...

曾建凯
今天
1
0
探索802.11ax

802.11ax承诺在真实条件下改善峰值性能和最差情况。 如何改善今天的Wi-Fi? 在决定如何改进当前版本以外的Wi-Fi时,802.11ac,IEEE和Wi-Fi联盟调查了Wi-Fi部署和行为,以确定更广泛使用的障碍...

linuxprobe16
今天
2
0
使用linux将64G的SDCARD格式化为FAT32

一、命令如下: sudo fdisk -lsudo mkfs.vfat /dev/sda -Isudo fdisk /dev/sda Welcome to fdisk (util-linux 2.29.2). Changes will remain in memory only, until you decide to wri......

mbzhong
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部