为什么空 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;
}
我正在尝试测试 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;
}