Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

การเรียงลำดับ vector ของ custom objects ด้วย C++ STL


ใช้ 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