二分法查找操作:
binary_search | 判断范围中是否存在值等价于给定值的元素 |
equal_range | 返回范围中值等于给定值的元素组成的子范围 |
lower_bound | 返回指向范围中第一个值大于或等于给定值的元素的迭代器 |
upper_bound | 返回指向范围中第一个值大于给定值的元素的迭代器 |
binary_search
判断范围中是否存在值等价于给定值的元素
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | // binary_search example #include <iostream> // std::cout #include <algorithm> // std::binary_search, std::sort #include <vector> // std::vector bool myfunction ( int i, int j) { return (i<j); } int main () { std::cout << “looking for a 3… “; // using myfunction as comp: std::cout << “looking for a 6… “; return 0; |
输出:
1 2 | looking for a 3… found! looking for a 6… not found. |
equal_range
返回范围中值等于给定值的元素组成的子范围
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // equal_range example #include <iostream> // std::cout #include <algorithm> // std::equal_range, std::sort #include <vector> // std::vector bool mygreater ( int i, int j) { return (i>j); } int main () { // using default comparison: return 0; |
输出:
1 | bounds at positions 2 and 5 |
lower_bound
返回指向范围中第一个值大于或等于给定值的元素的迭代器
upper_bound
返回指向范围中第一个值大于给定值的元素的迭代器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // lower_bound/upper_bound example #include <iostream> // std::cout #include <algorithm> // std::lower_bound, std::upper_bound, std::sort #include <vector> // std::vector int main () { int myints[] = { 10, 20, 30, 30, 20, 10, 10, 20}; std::vector< int> v(myints,myints+ 8); // 10 20 30 30 20 10 10 20 std::sort (v.begin(), v.end()); // 10 10 10 20 20 20 30 30 std::vector< int>::iterator low,up; low=std::lower_bound (v.begin(), v.end(), 20); // ^ up= std::upper_bound (v.begin(), v.end(), 20); // ^ std::cout << “lower_bound at position “ << (low- v.begin()) << ‘\n’; std::cout << “upper_bound at position “ << (up – v.begin()) << ‘\n’; return 0; |
输出:
1 2 | lower_bound at position 3 upper_bound at position 6 |
特别说明:函数的中文释义来自:http://classfoo.cn/cpp/head/76573_319/,例子来自:http://www.cplusplus.com/reference/algorithm/