pair<int,int>
の演算よりもオーバーロードされているため、特定の方法でベクトルをソートできます。私はそれがペアの最初のキーに従って昇順になるようにし、最初のキーが等しい場合は、2番目のキーに従って降順にしたいと思います。オーバーロードされた演算子<on pairがソートで使用されていません
並べ替え機能がオーバーロードされた<
演算子を使用していないようですが、<
が2つのペアで呼び出された場合、返される出力は期待通りです。私はテストのために使用していた下のコードのスニペットを添付した:
#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;
}
入力ベクトルが{(1,10), (3,4), (3,8), (6,23), (1,6)}
あります。
私は出力が{(1,10), (1,6), (3,8), (3,4), (6,23)}
であると予想しています。
取得した出力は{(1,6), (1,10), (3,4), (3,8), (6, 23)}
です。
ご覧のとおり、標準の<
演算子を使用してオーバーロードしないで得られる出力が得られます。だから私はこれが問題かもしれないと思って、(3,4) < (3,8)
をチェックしました。この場合、私のオーバーロードされた演算子に応じて、答えはfalseとして返されました。ではどこが間違っていますか? sort
が過負荷演算子の影響を受けるのはなぜですか?同様の問題については、いろいろな質問がありますが、助けられたものは見つかりませんでした。
@ LightnessRacesinOrbit:はい、しました。あなたには何が間違っていますか? – therainmaker