Using binary_search with vector container

 
實習目標 先前練習過 vector 類別的使用, 這裡介紹如何運用 <algorithm> 中配合的 sort 以及 binary_search 演算法
 

C++ 的標準函式庫 (tw) 中提供多種方便的 容器 類別, 以及對應的演算法, 因為物件化的系統中你除了實作很多的物件之外, 有方便好用的物件提供給你的時候你也要盡量去使用它, 如此才能夠提昇撰寫軟體的效率

binary_search

C++ 的標準函式庫 (tw) 中, binary_search (cplusplus) 是一個配合排序過的容器物件很方便的演算法, 你可以直接使用而不需要自己實作, 可以省掉你一點時間

binary_search 的使用方法如下:

template <class ForwardIterator, class T>
bool binary_search (ForwardIterator first, ForwardIterator last, const T& val);

template <class ForwardIterator, class T, class Compare>
bool binary_search (ForwardIterator first, ForwardIterator last, const T& val,
Compare comp);

例如:

#include <iostream>     // cout
#include <algorithm>    // binary_search, std::sort
#include <vector>       // vector
#include <cstdlib>      // system()
using namespace std;

struct MyClass 
{
bool operator()(int i, int j) { return (i<j);}
} myLessObject; bool myCompare(int i, int j) { return (i<j); } struct StudentRecord { StudentRecord(int id1, int score1):id(id1), score(score1) {} bool operator<(const StudentRecord rhs) const { return id < rhs.id; } int id; int score; }; int main() { int myints[] = {1,2,3,4,5,4,3,2,1}; vector<int> v(myints, myints+9); // 1 2 3 4 5 4 3 2 1 // using default comparison: sort(v.begin(), v.end()); cout << "looking for a 3... "; if (binary_search(v.begin(), v.end(), 3)) cout << "found!\n"; else cout << "not found.\n"; // using myCompare as comp: sort(v.begin(), v.end(), myCompare); cout << "looking for a 6... "; if (binary_search(v.begin(), v.end(), 6, myCompare)) cout << "found!\n"; else cout << "not found.\n"; // using myLessObject as comp: sort(v.begin(), v.end(), myLessObject); cout << "looking for a 5... "; if (binary_search(v.begin(), v.end(), 5, myLessObject)) cout << "found!\n"; else cout << "not found.\n"; StudentRecord mysr[] = {StudentRecord(15, 91), StudentRecord(5, 75), StudentRecord(19, 81), StudentRecord(3, 90), StudentRecord(7, 83)}; vector<StudentRecord> vs(mysr, mysr+5); stable_sort(vs.begin(), vs.end()); cout << "looking for a 19... "; // use StudentRecord::operator<() if (binary_search(vs.begin(), vs.end(), StudentRecord(19,20))) cout << "found!\n"; else cout << "not found.\n"; system("pause"); }

C++ 物件導向程式設計課程 首頁

製作日期: 04/09/2014 by 丁培毅 (Pei-yih Ting)
E-mail: pyting@mail.ntou.edu.tw TEL: 02 24622192x6615
海洋大學 電機資訊學院 資訊工程學系 Lagoon