如何用C++實(shí)現(xiàn)less復(fù)雜比較

c++
小樊
83
2024-09-14 09:27:41

在 C++ 中,你可以通過(guò)重載 operator< 來(lái)實(shí)現(xiàn)復(fù)雜的比較操作。這里有一個(gè)簡(jiǎn)單的例子,展示了如何為一個(gè)自定義結(jié)構(gòu)體實(shí)現(xiàn) less 比較操作:

#include<iostream>
#include<vector>
#include<algorithm>

struct Person {
    std::string name;
    int age;
};

// 重載 operator< 運(yùn)算符
bool operator<(const Person &a, const Person &b) {
    // 先比較年齡
    if (a.age < b.age) {
        return true;
    } else if (a.age > b.age) {
        return false;
    } else {
        // 如果年齡相同,則按名字的字母順序排序
        return a.name < b.name;
    }
}

int main() {
    std::vector<Person> people = {{"Alice", 30}, {"Bob", 25}, {"Charlie", 30}};

    // 使用 std::sort 對(duì) people 進(jìn)行排序
    std::sort(people.begin(), people.end());

    // 輸出排序后的結(jié)果
    for (const auto &person : people) {
        std::cout<< person.name << " "<< person.age<< std::endl;
    }

    return 0;
}

在這個(gè)例子中,我們定義了一個(gè) Person 結(jié)構(gòu)體,并重載了 operator< 運(yùn)算符。這個(gè)運(yùn)算符首先比較兩個(gè) Person 對(duì)象的年齡,如果年齡相同,則按照名字的字母順序進(jìn)行排序。然后我們使用 std::sort 函數(shù)對(duì)一個(gè)包含 Person 對(duì)象的 std::vector 進(jìn)行排序,并輸出排序后的結(jié)果。

0