使用C ++ STL对自定义对象的向量进行排序
您可以使用C++STL函数std::sort对自定义对象的向量进行排序。sort函数具有一个重载形式,该形式将第一个,最后一个比较器作为参数。first和last是容器的first和last元素的迭代器。比较器是一个谓词函数,可用于指示如何对容器进行排序。
示例
#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中使用Lambda表达式 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; } //将其传递给排序: sort(vec.begin(), vec.end(), &comparator);
您也可以在类/结构中重载<运算符,并直接使用sort(first,last)形式。因此,排序时将使用此功能比较项目。