C++競プロ学習日記(仮)

( 学習記録であり解説Blogではないです )

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() という関数を覚えました。
minmaxはそれぞれ知っていましたがminmaxがあるなんて!
同時に大きい値と小さい値を返してくれるのですが、
std::pair で返って来るみたいです。
なので、それぞれfirstsecondで参照できて、
firstmin値が、secondmax値が返って来ました。

どんな問題を解く時に利用出来るのかまだあまり想像つかないのですが、
便利っぽいので、いつか使えますよーに。

( 参照: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 )