とくにあぶなくないRiSKのブログ

危ないRiSKのブログだったかもしれない。本当はRiSKだけどググラビリティとか取得できるIDの都合でsscriskも使ったり。

std::binary_search, std::lower_bound, std::upper_bound, std::equal_range

STL―標準テンプレートライブラリによるC++プログラミング 第2版

// P110 ex05-24.cpp
#include<iostream>
#include<vector>
#include<algorithm>
#include<cassert>
int main(){
 using std::cout;
 using std::endl;
 using std::vector;
 using std::binary_search;
 using std::upper_bound;
 using std::lower_bound;
 using std::equal_range;
 cout << "Illustrating the generic binary search algorithms." << endl;
 const int N = 15;
 vector<int> v(N);
 for(int i = 0; i < N; ++i)
  v[i] = i;

 for(int i = 0; i < N; ++i)
  assert(binary_search(v.begin(), v.end(), i));
 assert(!binary_search(v.begin(), v.end(), N));

 // 同じ値の範囲を作って,実験
 v[N - 4] = v[N - 3] = v[N - 2] = N;
 v[N - 1] = N + 1;
 const vector<int>::const_iterator lower = lower_bound(v.begin(), v.end(), N),
  upper = upper_bound(v.begin(), v.end(), N);
 const std::pair<
  vector<int>::const_iterator,
  vector<int>::const_iterator
 > range = equal_range(v.begin(), v.end(), N);

 assert(*lower == N && *range.first == N);
 assert(*upper == N + 1 && *range.second == N + 1);
 cout << " --- Ok." << endl;
}