ABC128 B問題:Guidebook

問題. Guidebook

 N 個のレストランがある. i 番目のレストランは  S_i 市にあり, P_i 点に評価されている.これらのレストランを市名の辞書順で昇順に整列をして順番にレストランの番号を出力せよ.ただし,市名が同じ場合は評価の降順に整列せよ.

制約 1 \le N \le 100,  1 \le |S_i| \le 10,  0 \le P_i \le 100  (P_i \neq P_j, 1 \le i < j \le N)

解法.整列アルゴリズム

 N が小さいのでバブルソートなどの  O(N^2) 時間アルゴリズムでも間に合うが,ここでは,C++STL にある std::sort アルゴリズムを使用する.
 i 番目のレストランの情報を3個組  (S_i, -P_i, i) として持ち, std::sort に適用すると  O(N \log N) 時間で要求される順番に整列される.3個組をどのようにデータとして表現するかで実装方法がいろいろあるが,下では構造体による実装,STL<pair> による実装,STL<tuple> による実装と ラムダ式 を用いた実装を載せる.

計算時間 O(N \log N)

2個組以下ならば迷わないけど3個組以上になると少し迷う.好きな方法で良いと思う.
ラムダ式でキャプチャの参照を const できないのかな?