2011-03-02 12 views
5

सॉर्ट नहीं कर रहा है मेरे पास यह मल्टीमैप है जो स्ट्रिंग की हैमिंग दूरी को इसके संबंधित स्ट्रिंग में मैप करने के लिए बनाया गया है।मल्टीमैप

चूंकि दो तारों की हैमिंग दूरी समान हो सकती है, इसलिए मैं उन्हें आरोही क्रम में क्रमबद्ध करना चाहता हूं। हालांकि जब मैं इसे प्रिंट करता हूं, तो इसे हल नहीं किया जाता है। हैमडिस्टएरे को एक हस्ताक्षरित प्रकार के रूप में घोषित किया जाता है।

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

'चेक' इस प्रकार के लिए एक मूर्ख नाम है। –

+0

मुझे नहीं पता कि आपका पोस्ट कोड टेस्टकेस कैसा है, क्योंकि आप केवल एक मान डालते हैं। –

+0

@ टोमालक गेरेकलल कोड लूप के अंदर है, इसलिए 'जे'। चेक चुना गया था क्योंकि यह एक स्ट्रिंग को ठीक करता है कि डेटाबेस से इसकी हैमिंग दूरी कितनी करीब है। – Xann

उत्तर

0

डिफ़ॉल्ट टेम्पलेट फ़ंक्शन डिफ़ॉल्ट नहीं है क्योंकि यह डिफ़ॉल्ट है। के रूप में बिना घोषित चेक का प्रयास करें:

typedef multimap<unsigned, string> Check; 

संपादित: यह करने के लिए सबसे अच्छा तरीका * key_type के रूप में एक हैश कुंजी * उत्पन्न करने के लिए है और मूल्य प्रकार से एक std::pair<unsigned, string>

+0

यह कुछ भी बदलने जा रहा है? – pmr

+0

सच है, लेकिन अप्रासंगिक है। –

+0

कोशिश की लेकिन यह कुछ भी नहीं बदला। – Xann

4

तत्वों हो सकता है एक मल्टीमैप में कुंजी द्वारा क्रमबद्ध किया जाता है (इस मामले में हस्ताक्षरित हथौड़ा दूरी)। एक ही कुंजी वाले तत्वों को मूल्य (इस मामले में स्ट्रिंग) द्वारा क्रमबद्ध नहीं किया जाता है, वे आमतौर पर उस क्रम में रखा जाता है जिसमें उन्हें डाला जाता है।

+0

इसे इंगित करने के लिए धन्यवाद। मैं हथौड़ा दूरी को उसके अनुरूप स्ट्रिंग के साथ कैसे क्रमबद्ध करूं? क्या मुझे इसे मैन्युअल रूप से करना चाहिए? – Xann

+0

हस्ताक्षरित और स्ट्रिंग की जोड़ी के सेट या मल्टीसेट का उपयोग करें। – kbjorklu

+0

मल्टीमैप दस्तावेज़ इस उत्तर का बैक अप लेते हैं: 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 एस बनाने के लिए आवश्यकता होगी।

संबंधित मुद्दे