Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Sắp xếp vector đối tượng tùy chỉnh dùng STL C++


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.