簡體   English   中英

map / set迭代器不兼容-檢查對象是否在map中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM