2010-05-12 16 views
28

ऐसा लगता है कि मैं एक std :: vector < std :: जोड़ी < int, std :: string > > सॉर्ट कर सकता है, और यह int मान के आधार पर क्रमबद्ध होगा। क्या यह एक अच्छी तरह से परिभाषित चीज है? क्या std :: pair के पास इसके तत्वों के आधार पर एक डिफ़ॉल्ट क्रम है?std :: pair <int, std :: string> अच्छी तरह से परिभाषित करने का आदेश है?

उत्तर

44

std::pair शब्दावली तुलना का उपयोग करता है: यह पहले तत्व के आधार पर तुलना करेगा। यदि पहले तत्वों के मान बराबर हैं, तो यह दूसरे तत्व के आधार पर तुलना करेगा।

सी ++ 03 मानक में परिभाषा (खंड 20.2.2) है:

template <class T1, class T2> 
bool operator<(const pair<T1, T2>& x, const pair<T1, T2>& y); 

Returns: x.first < y.first || (!(y.first < x.first) && x.second < y.second). 
1

Documentation from SGI

तुलना ऑपरेटर। यह शब्दावली तुलना का उपयोग करता है: वापसी मान सही है यदि x का पहला तत्व y के पहले तत्व से कम है, और गलत है यदि y का पहला तत्व x के पहले तत्व से कम है। यदि इनमें से कोई भी मामला नहीं है, तो ऑपरेटर < एक्स और वाई के दूसरे तत्वों की तुलना करने का परिणाम देता है। इस ऑपरेटर का उपयोग केवल तभी किया जा सकता है जब टी 1 और टी 2 दोनों कम से कम कॉम्पैरेबल हों। यह एक वैश्विक कार्य है, सदस्य कार्य नहीं।

ऐसा लगता है कि यह वास्तव में दोनों तत्वों का संयोजन है।

6
C++ 0x मानक की मेरी प्रतिलिपि, खंड 20.3.3.26 के अनुसार

, std::pair एक operator< इस तरह परिभाषित किया गया है कि के लिए दो जोड़े x और y, यह रिटर्न

x.first < y.first || (!(y.first < x.first) && x.second < y.second) 

मैं अगर कुछ नहीं कर रहा हूँ यह 2003 मानक का भी हिस्सा है। मुझे यह भी ध्यान रखना चाहिए कि यदि संकलित खुद कम नहीं हैं तो यह संकलित नहीं होगा।

0

हां। operator<()std::pair<T1, T2> के लिए परिभाषित किया गया है, यह मानते हुए कि T1 और T2 दोनों तुलनात्मक हैं।

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