1

我正在尝试使以下地图正常工作:

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 将返回默认构造值(例如,如果它映射到字符串,它只会返回空字符串,我可以检查是否查找 ["a"] == “” - 但我不知道 std::pairs 的默认构造值是什么)。

4

1 回答 1

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()有点冗长,但它使它更具可读性(在我看来)。

于 2012-11-12T08:47:04.033 回答