首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ STL 泛型算法 find 與 binary_search 區別詳解

     編輯:程式設計疑難解答

核心區別

特性std::findstd::binary_search
前提條件無序/有序皆可範圍必須已按相同準則排序
時間複雜度O(N) 線性掃描O(log N) 二分查找
返回值迭代器 (找到指向元素,否則 end())bool (僅判斷是否存在)
適用迭代器InputIterator (單向)ForwardIterator (需隨機訪問更佳)
自定義比較支援一元謂詞 (C++11 find_if)支援二元比較函數

有序集合的排序方式

C++ 標準庫關聯容器 (`std::set`, `std::map`, `std::multiset`...) 內部默認升序 (用 `std::less`)。可自定義比較函數實現降序或其他嚴格弱序。`std::vector` 等序列容器需手動 `std::sort` 並保持有序。

其他查找算法

  • std::lower_bound / upper_bound / equal_range:返回插入位置/區間,比 `binary_search` 資訊更豐富。
  • std::find_if / find_if_not:條件查找。
  • std::search / search_n:子序列查找。
  • std::adjacent_find:相鄰重複元素。

選擇建議

  • 無序數據、小規模、單次查找 → find。
  • 有序數據、頻繁查找、大規模 → binary_search / lower_bound / 關聯容器 (`set`/`map`)。
  • 需獲取元素位置或值 → 用 `lower_bound` / `find`,而非 `binary_search`。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved