先頭へ戻る

ソートされた範囲を扱う STLアルゴリズム 解答ページ | Programming Place Plus C++編【標準ライブラリ】 第23章

Programming Place Plus トップページC++編

先頭へ戻る

C++編で扱っている C++ は 2003年に登場した C++03 という、とても古いバージョンのものです。C++ はその後、C++11 -> C++14 -> C++17 -> C++20 と更新されており、今後も 3年ごとに更新されます。
なかでも C++11 での更新は非常に大きなものであり、これから C++ の学習を始めるのなら、C++11 よりも古いバージョンを対象にするべきではありません。特に事情がないなら、新しい C++ を学んでください。 当サイトでは、C++14 をベースにした新C++編を作成中です。

問題①

問題① ある範囲内に、ある値を持つ要素がいくつあるか調べるために equal_range関数を使う方法があります。このような目的を果たすプログラムを作成してください。


equal_range関数が返すイテレータのペア間の距離を調べれば、それが、一致した要素の個数です。

#include <algorithm>
#include <iostream>
#include <vector>
#include <iterator>

int main()
{
    typedef std::vector<int> IntVector;

    IntVector v;
    v.push_back(0);
    v.push_back(1);
    v.push_back(2);
    v.push_back(2);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);

    typedef std::pair<IntVector::iterator, IntVector::iterator> IteratorPair;
    const IteratorPair itPair = std::equal_range(v.begin(), v.end(), 2);

    std::cout << std::distance(itPair.first, itPair.second) << std::endl;
}

実行結果

3

ソート済みの範囲であれば、count関数(第19章)を使うよりも、equal_range関数を使う方が高速な可能性があります。


参考リンク


更新履歴

’2016/11/30 新規作成。



第23章のメインページへ

C++編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
Twitter でツイート Twitter をフォロー LINE で送る
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー