2014-05-23 11 views
5

, उदा जोड़े का एक वेक्टर छँटाई:क्या टुपल्स की एक अंतर्निहित शब्दावली तुलना है?

vector<pair<int, double>> v; 
sort(v.begin(), v.end()); 

आप जोड़े की lexicographical क्रम के आधार पर एक छंटाई है के बाद से, जब निर्दिष्ट नहीं elseway, एक lexicographical तुलना लागू होता है एक छँटाई कसौटी निर्दिष्ट करने की आवश्यकता नहीं है ।

क्या टुपल्स के लिए भी एक समान व्यवहार मानक है?

VS2012 में इस संकलित

vector<tuple<int, double, char>> tv; 
sort(tv.begin(), tv.end()); 

परंतु वह ऐसा करने के लिए अनिवार्य मानक है?

उत्तर

6

वे operator==,!=,<,<=,>,>=(std::tuple) देख पा रहे हैं:

operator== 
operator!= 
operator< 
operator<= 
operator> 
operator>= 

कोषगत टपल में मानों तुलना

3

20.4.2.7 Relational operators [tuple.rel]

template<class... TTypes, class... UTypes> 
bool operator<(const tuple<TTypes...>& t, const tuple<UTypes...>& u); 

रिटर्न में: टी और यू के बीच एक शब्दावली तुलना का परिणाम। परिणाम के रूप में परिभाषित किया गया है:

(bool)(get<0>(t) < get<0>(u)) || (!(bool)(get<0>(u) < get<0>(t)) && ttail < utail) 

जहां rtail कुछ टपल आर के लिए एक टपल सभी लेकिन आर के पहले तत्व युक्त है। किसी भी दो शून्य-लंबाई tuples ई और एफ के लिए, ई < एफ झूठी वापसी करता है।

तो नहीं, वे एक अंतर्निहित एक भी नहीं है, वे एक स्पष्ट

6

है मानक [20.4.2.7 संबंधपरक ऑपरेटरों] के अनुसार: हाँ

tuple के लिए अतिभारित ऑपरेटर :

template<class... TTypes, class... UTypes> 
constexpr bool operator<(const tuple<TTypes...>& t, 
const tuple<UTypes...>& u); 

रिटर्न: एक lexicogr का परिणाम टी और यू के बीच उदासीन तुलना।

परिणाम डी फाई के रूप में नेड है:

(bool)(get<0>(t) < get<0>(u)) ||(!(bool)(get<0>(u) < get<0>(t)) && ttail < utail) 

जहां rtail कुछ टपल r के लिए एक टपल लेकिन r की-सी युक्तियां तत्व सभी युक्त है। किसी भी दो शून्य-लंबाई tuples e और f, e < ffalse देता है।

+0

+1 मेरे उत्तर चिपकाने वाली प्रतिलिपि के लिए +1 (वह प्रति मानक चिपकाता है) –

+3

थैंक्स लेकिन मैंने आपके उत्तर की प्रतिलिपि नहीं बनाई। बस मानक। ईमानदारी से, मैंने अपना पोस्ट करने से पहले मुझे आपका जवाब नहीं देखा। – 101010

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