[英]map/set iterators incompatible - checking to see if object is in map
我正在嘗試搜索“地圖”,以查看“人員”所攜帶的對象(消息)是否已包含在其地圖中。
這是地圖容器:
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的實際副本,因此最好使用引用類型。
任何幫助深表感謝。 謝謝
當您return messageList
時,您確實做錯了:您正在按照您的說明進行復制,這不僅是性能的問題(潛在地),而且在您的情況下,這是一個嚴重的錯誤,因為您兩次調用getMessageList()並在其中一個上執行find(),在另一個上執行end()。 這將導致未定義的行為,因為您隨后將比較來自兩個不同容器的兩個迭代器。 使函數返回您建議的引用,該問題將得到解決。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.