STL对的默认构造值

时间:2012-11-12 03:06:31

标签: c++ dictionary stl std-pair

我试图让以下地图正常工作:

enum ttype { shift, reduce }
map <string, pair<ttype, int> > lookup;

所以这很好用,但我需要一种方法来检查是否找不到密钥。例如,有些东西可以起作用:

cout << (lookup["a"]==NULL) << endl; // this is wrong, but I am trying to find a way to identify when lookup["a"] does not find a corresponding value

似乎如果找不到某个键,map将返回默认的构造值(例如,如果它映射到字符串,它将只返回空字符串,我可以检查是否查找[&#34] ;&#34;] ==&#34;&#34; - 但我不知道std :: pairs的默认构造值是什么。)

1 个答案:

答案 0 :(得分:0)

operator[]在未找到时添加项目并返回默认构造项目。 find()不返回默认的构造对,而是指向超出地图最后一个值的迭代器。

auto iter = lookup.find("a");
if (iter != lookup.end()) {
    std::cout << "Key was found :)" << std::endl;
    std::pair<ttype, int> result = iter->second;
    std::cout << "Result was: " << result.second << std::endl;
} else {
    std::cout << "Key was not found" << std::endl;
    // Maybe add the key to the map?
}

使用find()稍微冗长一点,但它更具可读性(在我看来)。