我有一個問題,使用std :: map,特別是使用find時。 我有以下代碼。std map查找總是爲真
class MyClass
{
update(const QVariant&);
QVariant m_itemInfo;
std::map<QVariant, int> m_testMap;
}
void update(const QVariant& itemInfo)
{
if(m_itemInfo != itemInfo)
{
// The items are not equal
m_itemInfo = itemInfo;
}
if(m_testMap.find(itemInfo) == m_testMap.end())
{
// TestMap doesnt contain key itemInfo.
m_testMap.insert(std::make_pair(itemInfo, 1));
}
// More code
}
功能update
多次調用(具有不同itemInfo對象)在我的代碼。現在,當我開始調試它時,我發現第一次調用update
時,如果輸入第一個和第二個循環。到現在爲止還挺好。但第二次調用update
我確實看到第一個if循環被調用,但第二個被跳過!我在這裏錯過了什麼?
顯示的'運營商=='你的QVariant的,你也可以編輯一點點地做MCVE [http://www.stackoverflow.com/help/mcve]。 – dkg
if(m_testMap.find(itemInfo)== m_testMap.end())的成功/失敗取決於'QVariant :: operator <'的行爲。沒有看到[最小化,完整和可驗證的示例](http://stackoverflow.com/help/mcve),很難說出可能出錯。 –
所以它依賴於operator <,而不是operator ==? – Frank