2013-02-18 18 views
12

मैं डेटा संरचना पर काम कर रहा हूं जहां इनपुट लगभग 1 टीबी बहुत बड़ा है। मुझे डेटा को सहयोगी कंटेनर में लोड करने की आवश्यकता है।मानचित्र बनाम मल्टीमैप सी ++ (प्रदर्शन)

डेटा में कुछ डुप्लिकेट प्रविष्टियां हैं इसलिए मैं मल्टीमैप का उपयोग कर रहा हूं लेकिन किसी ने मुझे इसका उपयोग करने के बजाय वेक्टर के मानचित्र का उपयोग करने का सुझाव दिया है। क्या मुझे पता चलेगा कि अंतर प्रदर्शन क्या है?

map<const char*, const char*, cmptr> mulmap; 

map <const char*, vector <const char*> ,cmptr> mmap; 
+5

आप दोनों को क्यों नहीं देखते हैं, और पता लगाते हैं? –

+7

दरअसल, दोनों मामलों में आपके प्रदर्शन की डिस्क गति से प्रभुत्व होने की संभावना है, जब तक आपके पास 1TB रैम वाला सिस्टम न हो ... –

+1

यदि आप कुंजी के रूप में 'const char *' का उपयोग करना चाहते हैं, तो आपको एक तुलना अनुमान भी प्रदान करना होगा इसके लिए काम करने के लिए। 'Std :: map 'का उपयोग करना आसान होगा। –

उत्तर

17

आप अपने समय सोच के बारे में mapmultimap बनाम बर्बाद कर रहे हैं। मान लीजिए कि डिब्बे की संख्या एन है और प्रति बिन की औसत संख्या एम

std::multimap<Key, Val> आमतौर पर डुप्लिकेट कुंजी के साथ एक आरबी पेड़ का उपयोग करती है।

  • लायें हे है (लॉग एन लॉग इन करें एम)
  • सम्मिलित हे है
  • हटाएं हे है (N + लॉग ऑन एम लॉग इन करें) (लॉग एन लॉग इन करें एम)
  • पुनरावृत्ति हे है (1)

std::map<Key, std::vector<Val>> आमतौर पर अद्वितीय कुंजी के साथ एक आरबी पेड़ का उपयोग करता है।

  • लायें हे (लॉग एन)
  • सम्मिलित हे (लॉग एन)
  • हटाएं हे (लॉग एन)
  • पुनरावृत्ति हे (1)

है आप के रूप में है है देख सकते हैं, अंतर तब तक बात करने लायक नहीं है जब तक एम बहुत बड़ा न हो।

हालांकि, दोनों का भंडारण रैम द्वारा सीमित है। 1 टीबी ज्यादातर सिस्टम के लिए संभव नहीं है, और कोई मदरबोर्ड मैंने इसका समर्थन करने के बारे में सुना है।

आप 1 टीबी डेटा के लिए डेटाबेस का उपयोग कर बेहतर हैं। आप इस कार्य के लिए लगभग किसी भी डेटाबेस का चयन कर सकते हैं। Kyoto Cabinet सरल है और आप क्या चाहते हैं करता है, लेकिन आप भी PostgreSQL, MySQL, SQLite, डायनमो, Redis, MongoDB, कैसेंड्रा, वोल्डेमॉर्ट ...

+2

"1 टीबी डेटा" के लिए, वास्तव में किसी डेटाबेस और कैसे पर सावधान रहना होगा डेटा का उपयोग किया जाता है .. प्रतिबंध और ऐसे हैं। –

+1

मैं सुपर कंप्यूटर पर काम कर रहा हूँ। – Manish

+2

@ user15662: मैं अभी भी इस प्रकार की नौकरी के लिए 'std :: 'पर क्योटो कैबिनेट की सलाह देता हूं। –

5

उपयोग कर सकते हैं इनपुट के 1 टीबी के साथ, मैं न प्रयोग करेंगे। सबसे अधिक संभावना है, आपके पास पर्याप्त रैम नहीं है। B-tree जैसे डिस्क डेटा संरचना पर कुछ का उपयोग करें।

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