Ho sovraccaricato l'operazione inferiore a pair<int,int>
, in modo da poter ordinare un vettore in un modo particolare. Voglio che sia in ordine crescente secondo la prima chiave di una coppia, e se le prime chiavi sono uguali, allora lo farei in ordine decrescente in base alla seconda chiave.operatore sovraccarico <su coppia non utilizzata in ordinamento
Il problema è che la funzione di ordinamento non sembra essere utilizzando il sovraccarico <
operatore, ma se <
è chiamato a 2 coppie, l'output restituito è quello che mi aspetto. Ho allegato un frammento di codice di sotto del quale sto utilizzando per il test:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool operator<(pair<int, int> &a, pair<int, int> &b)
{
if (a.first < b.first) return true;
else if ((a.first == b.first) && (a.second > b.second)) return true;
return false;
}
int main() {
vector<pair<int, int>> test {make_pair(1,10), make_pair(3,4), make_pair(3,8), make_pair(6, 23), make_pair(1,6)};
sort(test.begin(), test.end());
for (int i = 0; i < test.size(); i++)
cout << test[i].first << " - " << test[i].second << " ";
cout << endl;
auto a = make_pair(3,4);
auto b = make_pair(3,8);
cout << (a < b) << endl;
return 0;
}
Il vettore di ingresso è {(1,10), (3,4), (3,8), (6,23), (1,6)}
.
Mi aspetto che l'uscita sia {(1,10), (1,6), (3,8), (3,4), (6,23)}
.
L'output ottenuto è {(1,6), (1,10), (3,4), (3,8), (6, 23)}
.
Come si può vedere, l'output ottenuto è quello che si ottiene utilizzando l'operatore standard <
senza sovraccaricare. Quindi ho pensato che questo potrebbe essere un problema e ho controllato (3,4) < (3,8)
. In questo caso, la risposta è stata restituita come falsa, in base al mio operatore sovraccarico. Quindi dove sto andando male? Perché l'operatore sovraccarico non subisce l'effetto di sort
? Ci sono varie domande su SO su problemi simili, ma non è stato possibile trovare alcun aiuto.
@LightnessRacesinOrbit: Sì, l'ho fatto. Cosa ti sembra sbagliato? – therainmaker