質問
(タイトルのとおりです)
pair型のようなstruct型(例えば今回だとint L, int R)を自作した時に
bool operator<()
でソートする方法を定義しておく
① first要素を優先する昇順ソートを実装
② second要素を優先する昇順ソートを実装
①first昇順と②second昇順を必要時に使い分けたいのですが
Q1:①と②をstruct内でbool operator
で実装して使い分けることは可能でしょうか?
(Q2:もしその他の方法でもっと良い方法が何かあれば教えて頂きたいです)
質問した経緯や背景
目的は普段使うテンプレとして所持しておきたい
大抵はpair型でなんとかなることが多かったのですが
first,second,昇順,降順,添字を1文字にして簡潔にしたい
ことなどをまとめてテンプレにしておけたらいざ使う時に便利そうだなと思いました
※コードは随分前にネットで調べていいとこ取りしたような記憶があるのですがうろ覚えで
いざ使いたいと思ったらよく分からないので質問させていただきました
試したこと
①と②を単独で実装して片方づつコメントアウトすることで
片方だけの実装は出来ましたが
両立させて使い分ける方法が分かりませんでした
C++17
C++
1#include <bits/stdc++.h> 2 3using namespace std; 4 5// RHS とは? 6// right-hand-side 7 8struct P { 9 P(int _L, int _R) : L(_L), R(_R) {} 10 11 // // first優先ソート 12 // bool operator<(const P& rhs) const { 13 // // L の値を優先してソートする 14 // return L != rhs.L ? L < rhs.L : R < rhs.R; 15 // } 16 17 // secod優先ソート 18 bool operator<(const P& rhs) const { 19 // R の値を優先してソートする 20 return R != rhs.R ? R < rhs.R : L < rhs.L; 21 } 22 23 int L; 24 int R; 25}; 26 27void solve() { 28 vector<P> p; 29 30 // input 31 p.emplace_back(P(8, 2)); 32 p.emplace_back(P(9, 1)); 33 p.emplace_back(P(7, 3)); 34 p.emplace_back(P(5, 5)); 35 p.emplace_back(P(6, 4)); 36 37 sort(p.begin(), p.end(), [](P a, P b) { return a.R < b.R; }); 38 for (auto e : p) cout << e.L << " " << e.R << "\n"; 39} 40 41int main() { (solve()); } 42 43// output 44/*** 459 1 468 2 477 3 486 4 495 5 50***/
回答2件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2023/03/07 11:25
2023/03/07 11:48
2023/03/07 13:55