दिए गए कंटेनर की तुलना फ़ंक्शन को पुनर्प्राप्त करें, एक पुनरावर्तक को देखते हुए, क्या यह इटरेटर इस संग्रह के लिए सही तुलना फ़ंक्शन को पुनर्प्राप्त/उपयोग करना संभव है?एक इटरेटर
उदाहरण के लिए, मैं एक सामान्य एल्गोरिथ्म लिख रहा हूँ मान लें:
template <class InIt, class T>
void do_something(InIt b, InIt e, T v) {
// ...
}
अब मान लें कि मैं, कुछ सरल करने के लिए [b..e)
में v
लगता है की तरह चाहते हैं। यदि b
और e
std::vector
पर इटरेटर हैं, तो मैं बस if (*b == v) ...
का उपयोग कर सकता हूं। आइए मान लें कि b
और e
std::map
पर इटरेटर हैं। इस मामले में, I केवल कुंजी की तुलना करें, मानचित्र में जो कुछ भी शामिल है उसका पूरा मूल्य प्रकार नहीं।
तो सवाल यह है कि, उन इटरेटर को मानचित्र में दिया गया है, मैं उस मानचित्र की तुलना फ़ंक्शन को कैसे प्राप्त करूं जो केवल चाबियों की तुलना करेगा? साथ ही, मैं अंधेरे से यह नहीं मानना चाहता कि मैं map
के साथ काम कर रहा हूं। उदाहरण के लिए, यदि इटरेटर ने set
पर इंगित किया है, तो मैं set
के लिए परिभाषित तुलना फ़ंक्शन का उपयोग करना चाहता हूं। अगर उन्होंने vector
या deque
पर इंगित किया है, तो मुझे शायद ==
का उपयोग करना होगा, क्योंकि उन कंटेनरों में एक तुलनात्मक कार्य परिभाषित नहीं होगा।
ओह, लगभग भूल गया: मुझे लगता है कि कई मामलों में, एक कंटेनर केवल तत्व उसमें शामिल के लिए operator<
बजाय operator==
के समतुल्य होगा - मुझे लगता है कि उपयोग करने में सक्षम होने के साथ पूरी तरह से ठीक हूँ।
अभी कोई जवाब लिखने का कोई समय नहीं है, लेकिन इससे http://en.cppreference.com/w/cpp/container/map/key_comp मदद मिल सकती है। हम्म, ज्यादा नहीं, हालांकि। मुश्किल हिस्सा कंटेनर प्राप्त कर रहा है। –
मैं आपके 'सेट' मामले के लिए उलझन में हूं। 'सेट' के तुलनित्र को कुल-आदेश होना आवश्यक है, जो 'ऑपरेटर ==' के मामले में नहीं है। – pmr
क्या यह वही नहीं है, भले ही आप केवल नक्शा प्रविष्टि की कुंजी या पूरी प्रविष्टि की तुलना करें? [संपादित करें] कभी भी ध्यान न दें, बेशक यह नहीं है - आपके पास मैप किए गए हिस्से पर समानता संचालन नहीं हो सकता है। –