map(或者unordered_map使用方法一样)判断key值在不在的方法,其中文章第二点就走过坑,有的时候可以返回null/0,有的时候不能,所以第二点慎用

C++ map注意事项

1、在map中,由key查找value时,首先要判断map中是否包含key。

2、如果不检查,直接返回map[key],可能会出现意想不到的行为。如果map包含key,没有问题,如果map不包含key,使用下标有一个危险的副作用,会在map中插入一个key的元素,value取默认值,返回value。也就是说,map[key]不可能返回null。(需要注意,走过坑)

3、map提供了两种方式,查看是否包含key,m.count(key),m.find(key)。

4、m.count(key):由于map不包含重复的key,因此m.count(key)取值为0,或者1,表示是否包含。

5、m.find(key):返回迭代器,判断是否存在。

6、对于下面的场景,存在key就使用,否则返回null,有下面两种写法:

1 if(m.count(key)>0)
2 {
3     return m[key];
4 }
5 return null;
1 iter = m.find(key);
2 if(iter!=m.end())
3 {
4     return iter->second;
5 }
6 return null;

这里需要注意:前一种方法很直观,但是效率差很多。因为前面的方法,需要执行两次查找。因此,推荐使用后一种方法。

7、对于STL中的容器,有泛型算法find(begin,end,target)查找目标,map还提供了一个成员方法find(key)

 

原文链接:http://www.cnblogs.com/nzbbody/p/3409298.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
unordered_mapC++标准库中的一个关联容器,它提供了一种高效的键对存储方式,可以根据键快速查找。下面是使用unordered_map的基本方法: 1. 包含头文件:首先,你需要包含头文件 `#include <unordered_map>`。 2. 定义和初始化:可以使用下面的语法定义和初始化一个unordered_map对象: ```cpp std::unordered_map<KeyType, ValueType> myMap; ``` 这里的`KeyType`和`ValueType`分别指定了键和的类型。 你也可以使用初始化列表来初始化unordered_map: ```cpp std::unordered_map<int, std::string> myMap = { {1, "apple"}, {2, "banana"}, {3, "cherry"} }; ``` 3. 插入元素:可以使用`insert()`或`emplace()`函数向unordered_map中插入新的键对。 ```cpp myMap.insert(std::make_pair(key, value)); ``` 或者使用以下语法: ```cpp myMap.emplace(key, value); ``` 4. 访问元素:可以通过键来访问unordered_map中的使用`at()`函数可以获取特定键的,但要注意如果键不存在,会抛出`std::out_of_range`异常。另外,还可以使用下标运算符 `[]` 来访问元素,如果键不存在,则会自动插入一个新的键对并返回对应的。 ```cpp ValueType value = myMap.at(key); ``` 或者: ```cpp ValueType value = myMap[key]; ``` 5. 删除元素:可以使用`erase()`函数来删除unordered_map中的元素,指定要删除的键。 ```cpp myMap.erase(key); ``` 6. 遍历unordered_map:可以使用迭代器来遍历unordered_map中的键对。 ```cpp for (auto it = myMap.begin(); it != myMap.end(); ++it) { KeyType key = it->first; ValueType value = it->second; // 对键对进行操作 } ``` 这些是unordered_map的基本使用方法,你可以根据自己的需求来选择适合的操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值