請參閱以下代碼以更好地理解我的問題。插入C++ map STL容器失敗
class compareByValue {
public:
bool operator()(const string* s1, const string* s2) const
{
if (s1 == s2)
return true;
if ((s1==NULL) || (s2==NULL))
return false;
return (0 == s1->compare(s2->c_str()));
}
};
map<string*, string*, compareByValue> nodeIdToIpAddress;
for (int i = 0; i < nrec; ++i) {
nodeIdToIpAddress[ptr1[i]] = ptr2[i];
cout << "Added " << *(ptr1[i]) << " , " << *(ptr2[i]) << endl;
}
cout << "map has " << nodeIdToIpAddress.size() << " elements!" << endl;
我有一個映射維護指向字符串對象的鍵值對。我確定鍵和值都不是NULL指針。當我運行上述程序(當然,我跳過周圍的代碼以使其更容易理解),「添加......」打印49次。 ptr1 [i],ptr2 [i]是指向字符串對象的指針,不是NULL指針,因爲我的程序沒有段錯誤。
我遇到的問題是,當我在最後打印地圖大小時,它說地圖中只有1個元素。
如果有人能指示我找到修復方法,我將不勝感激。提前致謝。
編輯:@Mark解決方案工作像我的魅力。謝謝
EDIT2:在看到來自@Mark和@James的有價值的反饋之後,我想我不需要在我的地圖中存儲指向字符串的指針。我將更改我的代碼以將字符串存儲爲鍵/值,這意味着我不需要自定義比較器函子。非常感謝。
我不知道答案(但),但你可以用'return * s1 == * s2'替換'compare'行嗎? – 2011-04-11 21:39:24
我確實嘗試過這個選項。它只打印一個元素。 – Srikanth 2011-04-11 21:44:12
哇...... compareByValue :: operator()'的實現保證DailyWTF發佈。 o.O – ildjarn 2011-04-12 01:06:31