【发布时间】:2014-07-03 06:13:04
【问题描述】:
当我尝试在我的 C++ 程序中使用 map 的 find() 时,该函数似乎无法正常工作。
代码如下:
地图是这样定义的:
std::map<std::string,ownObject*> objects;
这是没有运行的代码
void someClass::addTarget(std::string objectName, ownObject* object)
{
if (this->objects.find(objectName) != this->objects.end())
this->objects.insert(std::pair<std::string,ownObject*>(objectName,object));
}
我的实际意图是检查是否已经存在具有该名称的条目(地图的第一个键),如果没有,则将其添加到地图中。
现在由于某种原因,他永远无法进入 if 函数(调用 insert())。从http://msdn.microsoft.com/en-us/library/92cwhskb.aspx 我得到,find() 的返回值要么是元素,要么是正在寻找的元素 - 或者如果它不可用,它是 objects.end()
调试时地图对象已经包含<'a',anObject>,然后我尝试添加<'b',anotherObject>,但正如我所说,他从未使用过insert() 函数,我不明白为什么.
正如给定主页上的解释(实际上用他们的 if-question 进行了尝试),这实际上应该有效,所以不幸的是我什至不知道问题出在哪里。
有人有想法吗?
【问题讨论】:
-
注意:您不必对此进行检查。如果密钥已经存在,则不会插入它。
-
我发现这仅在第一个和第二个键匹配时才有效。因此可以添加对,例如:
<'a',anotherObject>,然后添加<'b',anotherObject>。 -
@user3085931:
std::map就是这样工作的。它只查看比较和排序 [key-value] 对的键。价值就在旅途中。 -
@Blastfurnace 这就是我使用
if()检查它的原因 -
@user3085931:您似乎对 Rapptz 的评论和 Matthieu M. 的回答感到困惑。
std::map中的键保证是唯一的。如果你尝试insert()一个重复的键,它不会被添加,你可以通过函数的返回值来判断。
标签: c++ debugging map insert find