maxで最大値を取得すること自体は忘れないのですが、インデックスを取得する方法はよく忘れてしまうので、備忘録として記事にしてみました。
イテレータを取得するとインデックスと値の両方を取得できるので良いですね。
max_elementで取得する
まずmax_elementでイテレータを取得して、それにdistanceを利用してインデックスを取得します。
ちなみにdistanceではvectorの最初の要素と見つかった最大値のイテレータとの差を取得しています。
// 最大値のイテレータを取得
auto iterator = std::max_element(vec.begin(), vec.end());
// 最大値のインデックスを取得
int index = std::distance(vec.begin(), iterator);
ちなみに、最小値の場合はmax_elementの代わりにmin_elementを利用します。
// 最小値のイテレータを取得
auto iterator = std::min_element(vec.begin(), vec.end());
// 最小値のインデックスを取得
int index = std::distance(vec.begin(), iterator);
max_elementから最大値の値を取得する
先ほど取得したイテレータから値を取得することも出来ます!
// 最大値を取得
auto max_iterator = std::max_element(vec.begin(), vec.end());
int max_val = *iterator;
// 最小値を取得
auto min_iterator = std::max_element(vec.begin(), vec.end());
int min_val = *iterator;
最後に
競プロ初心者なので改善点や間違っている点などございましたら、ご教示いただけますと幸いです。
元々Pythonでやってましたが、c++だとなかなか難しいものですね。。。