2011-03-02 14 views
5

ben karşılık gelen dizeye bir dize hamming mesafesini eşleştirmek için inşa edilen bu Multimap var. İki dizeleri hamming mesafesi aynı olabilir beri Multimap sıralama değil

, onları artan düzende sıralanabilir istiyoruz. Ancak yazdırdığımda, sıralanmaz. HamdistArray işaretsiz bir tür olarak bildirildi.

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' bu tip saçma isimdir. –

+0

Sadece bir değer ekledikçe, posta kodunuzun nasıl bir deneme olduğunu göremiyorum. –

+0

@Tomalak Geret'kal Kod bir for döngüsündedir, dolayısıyla 'j'. Kontrol, hamming mesafesinin bir veri tabanından ne kadar yakın olduğuna bağlı olarak bir dizgiyi düzelttiğinden seçildi. – Xann

cevap

0

Varsayılan değer olduğundan, daha az şablon işlevi gerekli değildir. Bunu yapmanın en iyi yolu * key_type gibi bir karma anahtar * üretmektir ve değer türü daha bir std::pair<unsigned, string>

+0

Bu nasıl bir şey değiştirecek? – pmr

+0

Doğru, ama alakasız. –

+0

Denedim ama hiçbir şey değiştirmedi. – Xann

4

Elemanları olabilir:

typedef multimap<unsigned, string> Check; 

Düzenlendi: olarak olmadan ilan Kontrolü deneyin Bir multimap anahtar ile sıralanır (bu durumda imzasız hamming mesafesi). Aynı anahtara sahip olan öğeler, bu diziye (bu durumda dizgeye) göre sıralanmazlar, genellikle eklendikleri sırayla tutulurlar.

+0

Bunu işaret ettiğiniz için teşekkür ederiz. Hamming mesafesini karşılık gelen dizgiyle birlikte nasıl sıralayabilirim? Bunu manuel olarak yapmalı mıyım? – Xann

+0

İmzasız veya dizili bir çift kümesini veya kümesini kullanın. – kbjorklu

+0

Bu multimap dokümanlar şu yanıtı destekliyor: http://www.cplusplus.com/reference/stl/multimap/insert/ –

0

Bu tuşlar karşılaştırıldığında, bu bilinmemektedir çünkü temsil ettikleri hangi değer, std::multimap kullanılarak mümkün değildir. değil aynı zamanda değer (dize) tarafından tuşu (uzunluk) tarafından

0

multimap tek sıralar. Bu durumda, en iyi yaklaşımınızın bir std::map<unsigned, std::set<std::string> > olduğunu sanıyorum. Ayrıca std::set<std::pair<unsigned, std::string> > kullanabilirsiniz ama arama üzerinde arama yapmak için kukla pair s inşa etmek gerektirecektir.