我正在尝试搜索我的地图,以查看人员接收的对象(消息)是否已包含在他们的地图中。
这是地图容器:
std::map<MessageContent, unsigned int> messageList;
这是我对find()函数的调用:
if(listOfPersons.at(y).getMessageList().find(*tempMessage.getMessageContent())
!= listOfPersons.at(y).getMessageList().end())
这是getMessageContent():
MessageContent* Message::getMessageContent() const
{
return mc;
}
最后这里是getMessageList()函数
std::map<MessageContent, unsigned int> Persons::getMessageList() const
{
return messageList;
}
也与手头的主题有关,我认为我错误地使用return messageList;
,因为我认为这种类型的返回返回了messageList的实际副本,因此最好使用引用类型。
非常感谢任何帮助。 谢谢
答案 0 :(得分:1)
当你return messageList
时,你确实做错了什么:正如你所说,你正在制作副本,这不仅是性能问题(可能),但在你的情况下,它是一个关键的错误,如你调用getMessageList()两次,然后在其中一个上执行find(),在另一个上执行end()。这将调用未定义的行为,因为您将比较来自两个不同容器的两个迭代器。使函数按照建议返回引用,该问题将得到解决。