Có thể sắp xếp vector đối tượng tùy chỉnh bằng std::sort của STL. Hàm sort có dạng nạp chồng nhận 3 tham số: first, last, comparator. First và last là iterator đến phần tử đầu/cuối. Comparator là hàm谓词 (predicate) cho biết cách sắp xếp.
Ví dụ (C++11 lambda)
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
struct MyStruct {
int key;
string data;
MyStruct(int key, string data) : key(key), data(data) {}
};
int main() {
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"));
// Dùng lambda 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;
}Đầu ra
this is a test
Phiên bản C++ cũ hơn có thể truyền tham chiếu hàm:
bool comparator(const MyStruct& lhs, const MyStruct& rhs) {
return lhs.key < rhs.key;
}
// Gọi sort:
sort(vec.begin(), vec.end(), &comparator);Cũng có thể nạp chồng toán tử < trong struct và dùng sort(first, last) trực tiếp.