minmax(), minmax_element()
No.292 芸名 - yukicoder を解いた時に学んだことメモ。
参考:とーらすさんの提出
#include <bits/stdc++.h> using namespace std; int main(){ int i, j; cin >> i >> j; auto temp = minmax(i, j); cout << temp.first << endl; //min値 cout << temp.second << endl; //max値 return 0; }
std::minmax() という関数を覚えました。
minとmaxはそれぞれ知っていましたがminmaxがあるなんて!
同時に大きい値と小さい値を返してくれるのですが、
std::pair で返って来るみたいです。
なので、それぞれfirstとsecondで参照できて、
firstでmin値が、secondでmax値が返って来ました。
どんな問題を解く時に利用出来るのかまだあまり想像つかないのですが、
便利っぽいので、いつか使えますよーに。
( 参照:std::minmax - C++入門 )
/*-----追記-----*/
#include <bits/stdc++.h> using namespace std; int main(){ vector<int> vc={1,2,3,4,5,6,7,8,9,10}; auto result = minmax_element(vc.begin(), vc.end()); cout << "最小値:" << *result.first << ends; // <-----「 * 」付加!!! cout << "最大値:" << *result.second << ends; //<-----「 * 」付加!!! }
vectorに格納された値から最大値と最小値を取る方法。
std::minmax_element()を使います。
std::minmax_element()は与えられた範囲内から最大値と最小値の要素を指すイテレータを返します。
戻り値はstd::minmaxと同じstd::pairで、最小→first, 最大→secondで受け取れます。
本来の型は pair<vector<int>::const_iterator, vector<int>::const_iterator>
計算量はO(N)
( 参考:C++ポケリ P428 )