【发布时间】:2015-12-09 06:52:41
【问题描述】:
我有一个 std::map 关联 const char* 键和 int 值:
std::map<const char*, int> myMap;
我用三个键初始化它,然后检查它是否可以找到它:
myMap["zero"] = 0;
myMap["first"] = 1;
myMap["second"] = 2;
if (myMap.at("zero") != 0)
{
std::cerr << "We have a problem here..." << std::endl;
}
并且没有打印任何内容。从这里看,一切正常。
但稍后在我的代码中,在不更改此映射的情况下,我尝试再次找到一个键:
int value = myMap.at("zero");
但是at 函数会抛出std::out_of_range 异常,这意味着它找不到元素。 myMap.find("zero") 也这么认为,因为它在映射的末尾返回一个迭代器。
但最令人毛骨悚然的是,关键真的在地图中,如果在调用at 函数之前,我会像这样打印地图的内容:
for (auto it = myMap.begin(); it != myMap.end(); it++)
{
std::cout << (*it).first << std::endl;
}
输出如预期:
零
第一
第二个
这怎么可能?我不使用任何 beta 测试库或任何应该不稳定的东西。
【问题讨论】:
-
指向相同字符串字面量的指针是否保证具有相同的地址?
-
我有一个 std::map 将 const char 键与 int 值关联:* -- 如果您希望键是字符串,请使用字符串:
std::map<std::string, int>.
标签: c++ c++11 dictionary std