Мой оператор перегрузки <не применяется к функции сортировки в cpp - PullRequest
3 голосов
/ 09 марта 2019

Я хочу перегрузить оператор <между 2 парами.Это работает, когда я сравниваю, используя <, но не работает, когда я использую функцию сортировки built_in cpp.#include использование пространства имен std; </p>

typedef pair<int,int> pii;

bool operator < (const pii &a,const pii &b){
    return a.second<b.second;
}

int main()
{
    pii a,b;
    a=make_pair(1,4);
    b=make_pair(2,3);
    if(a<b) cout<<"a<b\n";
    else cout<<"b<a\n";

    vector<pii> v;
    v.push_back(a);
    v.push_back(b);
    sort(v.begin(),v.end());

    for(auto x:v)
        cerr<<x.first<<" "<<x.second<<endl;

    return 0;
}

Вывод:

b<a
1 4
2 3

Я запутался, почему он не печатает:

b<a
2 3
1 4

1 Ответ

7 голосов
/ 09 марта 2019

std::pair уже имеет встроенный operator<. Если вы хотите отсортировать по другим критериям, вы можете передать функцию сравнения.

std::sort(v.begin(),v.end(), [](auto& lhs, auto& rhs){ return lhs.second < rhs.second; });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...