ใช้ std::sort พร้อม comparator function สำหรับ vector ของ custom objects
ตัวอย่าง: เรียงตาม key ด้วย Lambda (C++11)
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
struct MyStruct {
int key;
string data;
MyStruct(int k, string d) : key(k), data(d) {}
};
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"));
// ใช้ lambda expression เป็น comparator
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++ เก่า)
- ส่ง function pointer:
sort(vec.begin(), vec.end(), &comparator); - Overload
operator<ใน struct แล้วใช้sort(vec.begin(), vec.end())โดยไม่ต้องส่ง comparator