आप C++ STL फ़ंक्शन std::sort का उपयोग करके कस्टम ऑब्जेक्ट के वेक्टर को सॉर्ट कर सकते हैं। सॉर्ट फ़ंक्शन में एक अतिभारित रूप होता है जो पहले, अंतिम, तुलनित्र तर्क के रूप में लेता है। पहले और आखिरी कंटेनर के पहले और आखिरी तत्वों के इटरेटर हैं। तुलनित्र एक विधेय कार्य है जिसका उपयोग यह बताने के लिए किया जा सकता है कि कंटेनर को कैसे क्रमबद्ध किया जाए।
उदाहरण
#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")); // Using lambda expressions in 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++ संस्करणों पर काम कर रहे हैं, तो आप एक फ़ंक्शन संदर्भ भी पास कर सकते हैं -
//define the function: bool comparator(const MyStruct& lhs, const MyStruct& rhs) { return lhs.key < rhs.key; } // pass it to sort: sort(vec.begin(), vec.end(), &comparator);
आप क्लास/स्ट्रक्चर में <ऑपरेटर को ओवरलोड भी कर सकते हैं और सीधे सॉर्ट (प्रथम, अंतिम) फॉर्म का उपयोग कर सकते हैं। इसलिए सॉर्ट करते समय, यह आइटम की तुलना करने के लिए यह फ़ंक्शन लेगा।