博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C++——map注意事项
阅读量:6910 次
发布时间:2019-06-27

本文共 1305 字,大约阅读时间需要 4 分钟。

 

 

1. C++标准模块库STL中提供了两种基本的关联容器:set和map。其内部实现是都是采用红黑树,但不同的是,set中结点存储的是键值,map中结点存储的是<key,value>的键值对。在map中,由key查找value时,首先要判断map中是否包含key。如果不检查,直接返回map[key],可能会出现意想不到的行为。

 

2. 如果map包含key,则map[key]返回key所对应value的引用;如果map不包含key,使用下标有一个危险的副作用,会在map中插入一个key的元素,value取默认值,并返回value的引用,这就是为什么当向map中插入一个元素时,map[key] = value是成立的。综上所述,map[key]总有返回值。

 

3. map提供了两种方式,查看是否包含key,即使用成员函数count和find,对于map<Type1,Type2> m:

  • m.count(key):由于map不包含重复的key,因此m.count(key)取值为0,或者1,表示是否包含。
  • m.find(key):返回迭代器,判断是否存在。若存在则返回key对应结点的迭代器,否则返回m.end()

 

4. 对于查找map中是否存在key,有下面两种写法:

使用成员函数count:

bool is_map_key_exist1(const map
&m, const int &key){ if(m.count(key) > 0) return true; return false;}

使用成员函数find:

bool is_map_key_exist2(const map
&m, const int &key){ if(m.find(key) != m.end()) return true; return false;}

 

5. 当需要进行赋值或查找key对应的值时,推荐使用find。

例如:

//map
m;//int key;auto it = m.find(key);if( it != m.end()) return it->second;

可以看到只进行了一次查找。

若先使用count判断是否存在,再使用[]返回value,即:

//map
m;//int key;if(m.count(key) > 0) return m[key];

可以看到count和[]分别进行了一次查找,即两次查找。

基于效率的考虑,我们推荐使用find。

 

6. 对于STL中的容器,除了使用成员函数find返回迭代器外,还有泛型算法find(begin,end,target)查找目标。

 

参考资料:

  • https://www.cnblogs.com/nzbbody/p/3409298.html

 

转载于:https://www.cnblogs.com/oddcat/p/10265539.html

你可能感兴趣的文章
腾讯 AI Lab 正式开源PocketFlow,让深度学习放入手机!
查看>>
教你在Docker上不到2分钟建立一个多模型数据库!
查看>>
python输入输出语句
查看>>
HTTPS时代的到来是大势所趋!阿里云CDN如何助力企业网站进入HTTPS时代
查看>>
Linux 积极使用swap空间
查看>>
等待事件之Log File Sync
查看>>
php测试kafka
查看>>
js获取两个日期之间时间差(天数)
查看>>
Memcached 简介
查看>>
虚拟化二、Xen虚拟化技术
查看>>
Oracle 11g数据库随系统自动启动与关闭的设置方法
查看>>
天猫与九大快递合作 价格热战之后的冷静竞争
查看>>
git pull force
查看>>
scons用户手册
查看>>
使用new操作符来调用一个构造函数的时候发生了什么
查看>>
element-ui之el-scrollbar源码解析学习
查看>>
ceph 的pg诊断
查看>>
交换机配置vlan 访问控制列表
查看>>
我的友情链接
查看>>
12个时间管理妙招
查看>>