2011-03-02 34 views
5

我有這個multimap建立映射漢明距離的字符串到其對應的字符串。Multimap不排序

由於兩個字符串的海明距離可能相同,我希望它們按升序排序。但是,當我打印出來,它沒有排序。 hamdistArray被聲明爲無符號類型。

typedef multimap<unsigned, string, less<unsigned> > Check; 
      Check pairs; 

      pairs.insert(Check::value_type(hamdistArray[j], d.sortedWordDatabase[j])); 

      for(Check::const_iterator iter = pairs.begin(); iter != pairs.end(); ++iter) 
      { 
       cout << iter->first << '\t' << iter->second<< endl; 
      } 
+1

'Check'是這種類型的一個愚蠢的名字。 –

+0

我沒有看到您的發佈代碼是如何插入一個測試用例,因爲您只插入一個值。 –

+0

@Tomalak Geret'kal代碼在for循環中,因此是'j'。選中Check是因爲它基於它的漢明距離離數據庫的距離來糾正一個字符串。 – Xann

回答

0

由於是默認值,所以不需要模板函數。嘗試宣告檢查不作爲:

typedef multimap<unsigned, string> Check; 

編輯:要做到這一點,最好的辦法是生成一個散列鍵爲*爲key_type *和比價值型可能是std::pair<unsigned, string>

+0

這是怎麼改變什麼? – pmr

+0

正確,但無關緊要。 –

+0

嘗試過但它沒有改變任何東西。 – Xann

4

元素在多圖中按鍵排序(在這種情況下,無符號漢明距離)。具有相同鍵的元素不按值(在本例中爲字符串)排序,它們通常按照它們的插入順序保存。

+0

謝謝你指出。我如何將海明距離與相應的字符串一起排序呢?我應該手動做嗎? – Xann

+0

使用無符號和字符串對的集合或多重集合。 – kbjorklu

+0

multimap文檔似乎備份了這個答案:http://www.cplusplus.com/reference/stl/multimap/insert/ –

0

這不可能使用std::multimap,因爲當比較鍵時,不知道它們代表了哪個值。

0

multimap只按鍵(長度)排序,而不是按值(字符串)排序。在這種情況下,我懷疑你的最佳做法是std::map<unsigned, std::set<std::string> >。您也可以使用std::set<std::pair<unsigned, std::string> >,但搜索需要您構建虛擬pair以進行搜索。