आप C++ STL फ़ंक्शन std::sort का उपयोग करके कस्टम ऑब्जेक्ट्स के वेक्टर को सॉर्ट कर सकते हैं। सॉर्ट फ़ंक्शन का एक ओवरलोडेड फॉर्म है जो आर्गुमेंट्स के रूप में first, last, comparator लेता है। first और last कंटेनर के पहले और अंतिम एलिमेंट्स के इटरेटर्स हैं। comparator एक प्रेडिकेट फ़ंक्शन है जिसका उपयोग यह बताने के लिए किया जा सकता है कि कंटेनर को कैसे सॉर्ट करना है।
उदाहरण
#include<iostream> #include<algorithm> #include<vector> using namespace std; struct MyStruct { int key; string data; MyStruct(int key, string data) { this -> key = key; this -> data = data; } }; int main() { std::vector<MyStruct> vec; vec.push_back(MyStruct(4, "test")); vec.push_back(MyStruct(2, "is")); vec.push_back(MyStruct(3, "a")); vec.push_back(MyStruct(1, "this")); // C++11 में लैम्ब्डा एक्सप्रेशन का उपयोग sort(vec.begin(), vec.end(), [](const MyStruct& lhs, const MyStruct& rhs) { return lhs.key < rhs.key; }); for(auto it = vec.begin(); it != vec.end(); it++) { cout << it -> data << endl; } }
आउटपुट
यह आउटपुट देगा:
this is a test
यदि आप पुराने C++ वर्जन पर काम कर रहे हैं, तो आप फ़ंक्शन रेफरेंस भी पास कर सकते हैं:
// फ़ंक्शन परिभाषित करें: bool comparator(const MyStruct& lhs, const MyStruct& rhs) { return lhs.key < rhs.key; } // sort को पास करें: sort(vec.begin(), vec.end(), &comparator);
आप क्लास/स्ट्रक्ट में < ऑपरेटर को ओवरलोड भी कर सकते हैं और सीधे sort(first, last) फॉर्म का उपयोग कर सकते हैं। तो सॉर्टिंग करते समय, यह आइटम्स की तुलना के लिए इस फ़ंक्शन को लेगा।