[Java] 多次元の配列のソート
多次元の配列のソート
競技プログラミングの問題を解いてるときに、多次元の配列のソートってどうやるんだろうと悩んだことがありました。ここで多次元の配列のソートとは、例えば次の二つの配列A, Bが与えられたとします。
A = {4, 2, 5, 6, 1} B = {20, 30, 10, 50, 60}
ここで、各配列のi番目の要素を一組のデータとします。例えば、1番目の要素である4と20が一つのデータであるとします。
ここで、配列Aを昇順にソートしたとき、配列BもAの要素に対応して並び替えることを多次元のソートと呼ぶことにします。
この多次元のソートを実装する上で次のサイトが役に立ちました。
各配列のi番目の要素を一つのインスタンスとして定義します。構造体みたいなもんでしょうか。
そして、Arrays.sortとComparatorを使います。
コード
import java.util.Arrays; import java.util.Comparator; public class Exec { public static void main(String[] args) { int []A = {4, 2, 5, 6, 1}; int []B = {20, 30, 10, 50, 60}; Data []d = new Data[5]; for(int i= 0; i < 5; i++) { d[i] = new Data(A[i], B[i]); } Arrays.sort(d, new Comparator<Data>() { public int compare(Data d1, Data d2) { return d1.getA() - d2.getA(); } }); for(int i = 0; i < 5; i++) { System.out.println(d[i].getA() + " : " + d[i].getB()); } } } class Data{ private int a; private int b; public Data(int a, int b) { this.a = a; this.b = b; } public int getA() { return a; } public int getB() { return b; } }