Java向け競プロライブラリ(ペア)

ソート可能なペアとして入力値を取り扱うと解きやすい問題向けのライブラリです。必要ならば、問題の条件に適合するようにソート条件を変更して使います。

例えば以下の問題で役に立ちます。

AtCoder Beginner Contest 256 D - Union of Interval

import java.util.Objects;

final class Pair<F extends Comparable<F>, S extends Comparable<S>>
		implements Comparable<Pair<F, S>> {

	private F first;
	private S second;

	public Pair(F first, S second) {
		this.first = first;
		this.second = second;
	}

	public F getFirst() {
		return first;
	}

	public S getSecond() {
		return second;
	}

	@Override
	public int compareTo(Pair<F, S> o) {
		int t = this.first.compareTo(o.getFirst());

		if (t != 0) {
			return t;
		}

		return this.second.compareTo(o.getSecond());
	}

	@Override
	public boolean equals(Object obj) {
		if (obj == null) {
			return false;
		}

		try {
			Pair<F, S> another = (Pair<F, S>) obj;
			return Objects.equals(this.getFirst(), another.getFirst())
					&& Objects.equals(this.getSecond(), another.getSecond());
		} catch (ClassCastException e) {
			return false;
		}
	}

	@Override
	public String toString() {
		return Objects.toString(first) + ' ' + Objects.toString(second);
	}

}