入力
2 2
2 3
3 1
出力
3 1
2 3
2 2
一行目の数値が優先され上に表示されます、同じ場合は二行目の数値が優先され上に表示されます。
このような処理をするときはどのようなコードを書けばいいでしょうか?
入力を受け付けるコードを打ち込んでから手が止まってしまいました。
追加文:やったことはsort()qsort()などの標準ライブラリの使用です。
しかし、一行目は入れ替えられるが、一行目をキーにして、二行目を呼び出し、入れ替えるにはどうしたらいいのか、アルゴリズムが思いつきません。
//参考にしたサイト
https://codezine.jp/article/detail/6020
http://stlalv.la.coocan.jp/sort.html
追加文:基礎を学ぶために、標準ライブラリを使って処理をしたいです。構造体の一次配列でもOkです。
ご回答おねがいします!
C++
1#include <iostream> 2#include <algorithm> 3#include <vector> 4using namespace std; 5int main(void){ 6 int num[100][100]; 7 int n; 8 cin >> n; 9 for(int i = 0;i < n;i++){ 10 cin >> num[i][0] >> num[i][1]; 11 } 12 /* 13 int num[3][2] = {{ 2, 2 } 14 { 2, 3 } 15 { 3, 1 }} 16 */ 17 //sortやqsortを使ってみましたが、うまくいきませんでした 18 //sort(num[0],num[0] + n,greater<int>());これだとうまく行かない 19 //一行目を入れ替えて、同じになった数値をキーにして、二行目を比較して、入れ替える。 20 //といった部分が思いつきません。 21 22 for(int i = 0;i < n;i++){ 23 cout << num[i][0] << " " << num[i][1] << endl; 24 } 25 return 0; 26}
未完であっても良いので、ソースを追記して下さい。
行を降順(大きいものから小さいものへ)にソートするんですよね。
1列目の数値でソートし、同じ場合は 2列目でソートする。
1次元配列のソートはできますか?
ソートには何を使いますか?
選択ソート? バブルソート? 挿入ソート? クイックソート?
あるいはライブラリ関数の qsortを使う?
質問を編集して、ソートの条件を追加訂正してください。
データの持ち方は2次元配列が本当に正しいのですか?
構造体X,yの1次元配列のほうが趣旨にあっていませんか?
次の出題が二次配列のソートが必要のようで、この段階から学習しておきたいと思い質問いたしました。
構造体の一次配列のソートのほうも、時間がありましたらやり方をご教示いただければ幸いです。
まだ初心者で、明快な質問ができず申し訳ありません。ご理解のほど、ご回答をおねがいいたします。
> 次の出題が二次配列のソートが必要のようで、この段階から学習しておきたいと思い質問いたしました。
予習なんかしなくていいから復習をして、授業をしっかり聞いてわからないことは授業中に質問した方がいいと思う。
アドバイスありがとうございます。今回の問題はweb上の出題(スキルチェック)であり、残念なことにこの問題に対する回答及び、解説がありません。C++は完全独学です。
ソートに関するものはインターネットサーフィンで何かしらのヒントは得たものの、かゆいところに手が届かないものでした。
今回、自分ではわからないところをこの場を借りてを質問した経緯です。
まだ学習から一週間しか立っていないためC++を使い慣れるまではみなさまに多大なご迷惑をおかけすると思いますが、何卒よろしくおねがいします。
> みなさまに多大なご迷惑をおかけすると思います
いやいや、勘弁してよ(笑
実際はここは「コミュニティ」だから「多大な迷惑」を感じたら誰も回答とかくれなくなると思うけどね。
回答3件
あなたの回答
tips
プレビュー