binary_search関数

http://www.geocities.jp/ky_webid/cpp/library/020.html

既にソート済みのデータを対象に検索等を行うときに便利な関数の話です。

まずはbinary_search関数を見てみます。

#include <iostream>
#include <algorithm>
#include <vector>
#include <ctime>
using namespace std;

int main () {
    vector<int> data;
    
    // ランダムな値を格納する
    srand( static_cast<unsigned int>( time(NULL) ) );
    for(int i=0;i<10;++i) {
        data.push_back( rand() % 10 );
    }
    
    // 昇順ソートしておく
    sort(data.begin(),data.end());
    
    // 5という値をバイナリサーチする
    if ( binary_search( data.begin(),data.end(), 5 ) ) {
        cout << "見つかりました" << endl;
    }
    else {
        cout << "見つかりませんでした" << endl;
    }
    
    return 0;
}
$ main
見つかりました

$ main
見つかりませんでした

$ main
見つかりませんでした

できました。簡単ですね。

ちなみに元のデータが降順でソートされていた場合、binary_search関数を呼び出す際に降順で検索するという指定をしなければなりません。

// 降順でソート1
sort(data.begin(),data.end(), greater<int>());

// 降順用のバイナリサーチする
binary_search( data.begin(),data.end(), 5, greater<int>() );

注意が必要ですね。