[競プロ] map,setで最大値、最小値を取得する方法(begin(), rbegin())

最近知ったTipsを共有します。競プロのためだけに理解の浅いC++を使っている私ですが、最近になってmap, setで最小値、最大値を一発で取得する方法があることを知りました。というか、そもそもこれらにデータを入れると勝手にソートしてくれてるので、最小値、最大値が取れないとおかしいとは思ってたんですけどね。

その名は begin(), rbegin()

mapでもsetでも共通です。最小値を取得するときは begin() 、最大値を取得するときは rbegin() を使います。以下、サンプルコードです。

#include <bits/stdc++.h>
using namespace std;


int main(void){
  set<int> S;
  S.insert(4);
  S.insert(5);
  S.insert(1);
  S.insert(2);
  S.insert(3);
  cout << *S.begin() << endl;
  cout << *S.rbegin() << endl;

  map<int,int> mp;
  mp[4]++;
  mp[5]++;
  mp[1]++;
  mp[2]++;
  mp[3]++;
  cout << (*mp.begin()).first << endl;
  cout << (*mp.rbegin()).first << endl;
}
結果
1
5
1
5

感想

逆に今までこれを知らずにやってたのが縛りプレイみたいでしたね。。。