2013-05-14 6 views
8

यह वास्तव में क्या जांचता है इसमें शामिल हैं() और घटनाओं की संख्या की गणना नहीं, है ना? डुप्लिकेट की अनुमति नहीं है या तो इसमें शामिल नहीं होगा() गिनती() से बेहतर नाम हो सकता है?सी ++ एसटीएल इस प्रकार नामित कंटेनर की गिनती() विधि क्यों सेट है?

+0

हां, यह थोड़ा उलझन में है क्योंकि सेट :: गिनती (वास्तव में 'शामिल' का काम करता है। शायद ऐतिहासिक कारणों से। – taocp

+1

मुझे लगता है कि यह ['multiset'] (http://en.cppreference.com/w/cpp/container/multiset) इंटरफ़ेस से मेल खाता है, जहां डुप्लिकेट हो सकते हैं (और इस प्रकार 'गिनती()' वापस आ सकता है> 1)। हालांकि सकारात्मक नहीं है। – Xymostech

+0

ब्ला ब्ला स्थिरता यह एक बेवकूफ नाम है! – Nils

उत्तर

12

यह अन्य कंटेनर कक्षाओं के साथ संगत बनाने के लिए है, यह देखते हुए कि बहुरूपता के महान पहलुओं में से एक एक ही एपीआई के साथ विभिन्न वर्गों का इलाज करने में सक्षम होना है।

यह वास्तव में गिनती वापस करता है। तथ्य यह है कि गिनती केवल एक शून्य के लिए शून्य हो सकती है या उस पहलू को नहीं बदलेगी।

यह मूल रूप से संग्रह ऑब्जेक्ट से अलग नहीं है जो केवल एक ही समय में प्रत्येक "मान" की दो चीजों को अनुमति देता है। उस स्थिति में, यह शून्य, एक या दो की गिनती वापस कर देगा, लेकिन यह अभी भी एक गिनती है, जो एक सेट के समान है।

मानक के प्रासंगिक बात यह है कि यह जरूरी है C++11 23.2.4 जो साहचर्य कंटेनरों set, multiset, map और multimap बारे में बात करती है। टेबल 102 से अधिक इन साहचर्य कंटेनरों के लिए और "नियमित" कंटेनर के लिए आवश्यकताओं को ऊपर आवश्यकताओं को शामिल है, और count के लिए थोड़ा नीचे दूसरे शब्दों में बयान किया गया है:

size_type a.count(k) - k की कुंजी बराबर के साथ तत्वों की संख्या देता है। जटिलता log(a.size()) + a.count(k) है।

+0

'जटिलता लॉग (a.size()) + a.count (k) 'माध्य क्या है? यह रिकर्सिव लगता है :) – Cade

+0

@ कैड, मैं थोड़ी देर के लिए चिंतित था कि मैं इसे गलत तरीके से लिखेगा लेकिन नहीं। यह * वास्तव में * रिकर्सिव नहीं है क्योंकि जटिलता की गणना करने के लिए 'a.count (k) 'को कॉल करने वाले फ़ंक्शन में कुछ भी नहीं है - यह केवल यह बता रहा है कि फ़ंक्शन की जटिलता कुंजी से मेल खाने वाले तत्वों की संख्या से प्रभावित होती है। – paxdiablo

+0

हे, वाह, इतना सटीक। फॉलो अप क्यू का जवाब देने के लिए धन्यवाद। – Cade

-1

यह कंटेनरों पर एक मानक संचालन है जो मिलान करने वाले तत्वों की संख्या देता है। सूचियों जैसी चीजों में, यह सही समझ में आता है। यह सिर्फ इतना है कि एक सेट पर, वहाँ केवल एक तत्व में से एक घटना हो सकता है और इसलिए count एक मूल्य वापस कभी नहीं कर सकते हैं एक से अधिक 1.

+3

"सूचियों जैसी चीजों में, यह सही समझ में आता है।" लेकिन std :: सूची में कोई गिनती विधि नहीं है। – StackedCrooked

+0

आप सही हैं।मैं वास्तव में एक अन्य कंटेनर प्रकार का नाम देने के अपने प्रयास में हस्तशिल्प कर रहा था, विशेष रूप से एसटीएल में नहीं; बल्कि, बस * किसी * प्रकार जो कि अनुमानतः 'गिनती' विधि हो सकता है। @paxdiablo ने बहुत से विशिष्ट कंटेनरों का उल्लेख किया है जो * करते हैं * एक गिनती विधि है। – Gian

4

सभी साहचर्य कंटेनरों §23.2.4/8 में सूचीबद्ध शर्तें पूरी करनी होंगी तालिका 102 - सहयोगी कंटेनर आवश्यकताओं। इनमें से एक यह है कि वे a.count(k) जो तब

रिटर्न कुंजी बराबर के साथ तत्वों की संख्या के k के

तो कारण सभी साहचर्य कंटेनरों के बीच एक सुसंगत इंटरफेस है लागू है। उदाहरण के लिए, जेनेरिक फ़ंक्शन टेम्पलेट्स लिखते समय यह एकरूपता बहुत महत्वपूर्ण होगी जो किसी भी सहयोगी कंटेनर के साथ काम करेगी।

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