使用 C++ STL 對自定義物件向量進行排序
你可以使用 C++ STL 函式 std::sort 對自定義物件向量進行排序。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);
你也可以在類/結構中過載 < 運算子並直接使用 sort(first, last) 表單。因此,在排序時,它將採用此函式來比較各項。
廣告