我一直有這個問題一段時間與我的代碼,尋找我的錯誤,我看不到它。我有一張地圖,我將映射關鍵字映射到值。
我的問題是有時插入關鍵字=「藍色」的值插入到「紅色」的關鍵。
所以不是,
關鍵:紅色,值:OBJ1,OBJ2
重點:藍色,值:OBJ 3,OBJ4
我得到的,
關鍵:紅色,值:OBJ1,OBJ2,OBJ4(OBJ4應鍵入藍色)
關鍵:藍色,值:obj3將鍵值插入錯誤鍵?
不確定它是什麼,因爲相同版本的代碼適用於我擁有的其他地圖,它們只是沒有儘可能多的Keys。
addKeywordsForObject(const Object* const object, int nKeywords, ...)
{
va_list keywords;
char *keyword;
va_start(keywords, nKeywords);
for (int i = 0; i < nKeywords; i++) {
keyword = va_arg(keywords, char*);
if(objectToKeywordMap.find(keyword) == objectToKeywordMap.end()) {
keywordObject = new ObjectSet();
keywordObject->insert(const_cast<Object* const>(object));
objectToKeywordMap.emplace(StringToObjectSetMap::value_type(keyword,keywordObject));
}
else {
keywordObject->insert(const_cast<Object* const>(object));
objectToKeywordMap.emplace(StringToObjectSetMap::value_type(keyword,keywordObject));
}
}
va_end(keywords);
}
顯示在哪裏,這些參數的數量char *指針從哪裏來,你如何創建它們?看起來你不知道地圖中的鍵是指針,而不是字符串,地圖不會像字符串那樣比較它們。 – hamstergene
您不顯示密鑰如何存儲在地圖中。 'std :: string'和'char *'之間會有很大的區別!一個常見的問題是比較指針而不是字符串值。 –
猜猜我已經離開了。密鑰存儲爲字符串。該映射是map。我曾嘗試使用tempString在地圖中使用它之前將char *關鍵字存儲爲字符串,但它沒有效果。 –
Phillip