map :: find()无法找到现有密钥

时间:2014-02-20 20:07:55

标签: visual-c++

我只是试图使用标准std::map,我遇到了麻烦。我记得包含标题,这是我的声明:

std::map<const char *, UINT> boneList;

我已经填写了一些数据,但是当我尝试找到这样的值时:

std::cout << boneList.find("Bind_Spine1")->second;

但是,不是打印数字,而是在运行时弹出错误:“map / set iterator not derefernciable”。

但如果我这样做:

std::cout << boneList["Bind_Spine1"];

一切正常。当operator[]不是时,为什么find()返回end()?我正在使用visual studio 13

1 个答案:

答案 0 :(得分:2)

如果不存在,

boneList["Bind_Spine1"]会将一个项目添加到地图中。 boneList.find("Bind_Spine1")不会这样做。

将地图中的密钥更改为std::string。这应该解决问题。当您使用char const*作为地图的关键时,一切都会让人感到困惑。在C / C ++中,如果你有

char const* ap = "abcd"; 
char const* bp = "abcd";

然后不保证a == b。但是,如果您使用

std::string a = "abcd"; 
std::string b = "abcd";

然后保证a == b