雑記

長文で語りたいこと書いてます。

【C++】複数条件を用いた2次元配列のソート

きっかけ

ABC348のC、真っ先に思いついたのが(A,C)の配列を作って、Cをソートした後にAをソートすることで、入力例1なら(1,40) (1,100) (5,20) (5,30)になるので、こうなったらCの値が切り替わった瞬間の値だけを取得して、比較していけばOK、というのが真っ先に思いついたが公式回答では連想配列なるものを使うらしい。

とりあえず、複数条件のソートを色々探したが、いまいちピンとくるものはなく、とりあえずtupleを使えばうまくいきそうであるということだけ分かった。

 

方法

tupleを使う。

vector<tuple<int, int> > data = {C1,A1}, {C2,A2}...

のようにして、そのままソートするとCを最優先にソートして、次にAをソートしてくれる。

なお、値の取得はdata[i][j]のようにすることはできず、std::get<j>(data[i])のようにする必要があるっぽい?

おそらくN×3などの配列も同様にソートできると思うが、未検証。

 

ちなみに以下が自分の回答。#define Tuple(A,a,b) std::get<b>(A[a])としてマクロ化して

値を取得した。

 

提出 #55446019 - トヨタ自動車プログラミングコンテスト2024#4(AtCoder Beginner Contest 348)