当可接受的值是0时使用map :: find

时间:2019-03-08 21:52:25

标签: c++ stdmap

我在c ++中有以下地图

std::map<string,int> mymap;

在向其中插入几个值之后,我希望能够在地图中搜索一个值。我可以使用find函数来完成此操作

std::cout << "a => " << mymap.find("a")->second << '\n';

此问题是当我搜索不存在的键时,find返回0。我可能想插入一个值为0的键,但我还需要知道映射中是否不存在某个键。有什么办法可以做到这一点?

1 个答案:

答案 0 :(得分:1)

std::map::find并没有按照您认为的去做。

在不存在的键上调用find时,返回的迭代器是无效的迭代器;它没有指向有效的对象。因此,您尝试对此对象执行的任何操作都是未定义的行为,并且(可能)是对无效内存的访问。

您应该使用find的方式是获取迭代器,并将其与地图的end迭代器进行比较,以确保其有效。

std::map<std::string, int> mymap;

if(auto it = mymap.find("a"); it != mymap.end()) {//C++17 Initialized-If statement syntax
    std::cout << "a => " << it->second << std::endl;
}

//Old Syntax
std::map<std::string, int> mymap;

auto it = mymap.find("a"); 
if(it != mymap.end()) {
    std::cout << "a => " << it->second << std::endl;
}