2016-01-11 45 views
-3

我想創建一個字典類的類的樂趣在C + +中,類似於在Python中可以指定一個鍵和一個值(可能是任何類型的這種情況下,包括自定義類)。密鑰不斷被替換字典C++

for (unsigned int x = 0; x < word.length(); x++) { 
    if (!map.has_key(word[x])) { 
     std::cout << "CREATING " << word[x] << std::endl; 
     map[word[x]] = ics::ArraySet<char>(); 
     map[word[x]].insert(word[x]); 
    } 
    for (int y = 0; y < dist; y++) { 
     std::cout << "HELLO!" << std::endl; 
     if ((x + y) < word.length()) 
      std::cout << "ADDING " << word[x+y] << std::endl; 
      map[word[x]].insert(word[(x + y)]); 
     if ((x - y) >= 0) 
      map[word[x]].insert(word[(x - y)]); 
    } 
} 

發生的問題是我的密鑰不斷被替換。我試圖找到當前字母「x」範圍內的字母。我將這些附近的鍵追加到一個集合中,這是我的字典在這種情況下的價值。

有關示例:附近(賽車,2)

應該返回一個字典,像這樣的值...

字典( 'R' - > {R,A,C}, 'A' - > {R,C,E},...)

但是,什麼情況是,

if (!map.has_key(word[x])) 

不斷失敗,我的鑰匙一直被重新每隨着時間的推移。你相信你的壓痕

+2

[MCVE]請照常(和要求)? –

回答

1

典型的錯誤意味着代碼結構不存在

if ((x + y) < word.length()) 
     std::cout << "ADDING " << word[x+y] << std::endl; 
     map[word[x]].insert(word[(x + y)]); 

然而,聲明map[word[x]].insert(word[(x + y)]);是由if影響。

圍繞這裏的兩個陳述添加大括號{}

+0

我只是爲了看看它是否會添加字母(和它)而做的。它仍然不能解決這些問題,因爲這些問題被重置爲新的問題。 –

+0

所以你甚至沒有打擾發佈代表你的問題的代碼?你寧願讓人們分心,因爲你知道在你不關心的代碼中存在的問題?嘖!請參閱下面關於MCVE的問題的建議。仔細閱讀鏈接。 – Peter

+0

我實際上發佈了幾乎所有導致問題的函數內的代碼。我也注意到問題發生的地方。另外,如果我將整個代碼發佈到問題中,您仍然無法運行它,因爲它連接到一堆相互依賴的其他自定義類。我缺少的唯一代碼行是字面上的參數和我的代碼的返回語句。 –