为什么空 unordered_map.find 不返回 end()?

Why is empty unordered_map.find not returning end()?

我正在尝试测试 unordered_map 中是否已经存在具有给定键的条目。我正在使用 find() 函数来 return 一个迭代器。问题是 unordered_map 是否为空(或不为空)它 return 是一个 'empty' 对象,当没有给定键的条目时,就像这样 -

it = (<Error reading characters of string.>, -842150451)

我试过创建一个空的项目解决方案并放入一个最小示例。它仍然 return 与 find() 的 'empty' 对象相同。我什至尝试将密钥类型从 std::string 更改为 int,结果相同。

#include <unordered_map>

int main(int argc, char* argv[])
{
    std::string key = "test";
    std::unordered_map<std::string, int> myMap;
    myMap["abc"] = 5;
    std::unordered_map<std::string, int>::iterator it = myMap.find(key);
}

我期望 find() 到 return 'end' 当没有给定键的条目时,但输出是某种 'empty' 对象。

只需将迭代器与列表末尾进行比较,例如

  if (it == myMap.end()) {
    std::cout << "didn't find" << std::endl;
  } else {
    std::cout << "found " << it->second << std::endl;
  }