STL之Binary search

http://www.cppblog.com/patriking/archive/2011/01/16/138617.html

STL中对于有序序列(vector,list等)提供了相当相当强大的二分搜索Binary search算法。对于可以随机访问容器(如vector等),binary search负载度为对数级别(LogN),对于非随机访问容器(如list),则算法复杂度为线性。现在简要介绍一下几种常用的binary search算法:

ForwardIterator lower_bound (ForwardIterator first,ForwardIterator last, const T& value)
ForwardIterator lower_bound (ForwardIterator first,ForwardIterator last, const T& value, Compare comp)
//查找最远的一个iterator i, 使得[first,i)里面的任意一个iterator j,有 *j < value or comp(*j,value)==true.

ForwardIterator upper_bound (ForwardIterator first,ForwardIterator last, const T& value)
ForwardIterator upper_bound (ForwardIterator first,ForwardIterator last, const T& value, Compare comp)
//查找最远的一个iterator i, 使得[first,i)里面的任意一个iterator j,有 !(*j < value) or comp(*j,value)==false.

pair equal_range(ForwardIterator first, ForwardIterator last, const T& value)
pair equal_range(ForwardIterator first, ForwardIterator last, const T& value, Compare comp)
//查找最大的subrange[i,j),使得任意一个iterator in [i,j)满足!(*k<value) && !(value<*k) or comp(*k,value)==false && comp(value,*k)==false.

bool binary_search (ForwardIterator first, ForwardIterator last, const T& value)
bool binary_search (ForwardIterator first, ForwardIterator last, const T& value, Compare comp)
// 查找是否在[first,last)中存在iterator i,满足 !(*i<value) && !(value<*i) or comp(*i,value)==false && comp(value,*i)==false
// 存在则返回true,否则返回false.

#include<algorithm>
#include<iostream>
#include<vector>
#include<iterator>
using namespace std;
int main()
{vector<int>v;vector<int>::iterator itr;pair< vector<int>::iterator, vector<int>::iterator >vecpair;for(int i = 1; i <= 20; i++){v.push_back(i%6);}sort(v.begin(),v.end());cout << "array: " << endl << "    ";copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));cout << endl;//lower_boundcout << "lower_bound function, value = 3:" << endl; itr = lower_bound(v.begin(),v.end(),3);cout << "    [first, itr) = ";copy(v.begin(),itr,ostream_iterator<int>(cout," "));cout << endl;cout << "    [itr, last) = ";copy(itr,v.end(),ostream_iterator<int>(cout," "));cout << endl << endl;// upper_boundcout << "upper_bound function, value = 3:" << endl; itr = upper_bound(v.begin(),v.end(),3);cout << "    [first, itr) = ";copy(v.begin(),itr,ostream_iterator<int>(cout," "));cout << endl;cout << "    [itr, last) = ";copy(itr,v.end(),ostream_iterator<int>(cout," "));cout << endl << endl;// equal_rangecout << "equal_range function, value = 3:" << endl; vecpair = equal_range(v.begin(),v.end(),3);cout << "    [vecpair->first, vecpair->second) = ";copy(vecpair.first, vecpair.second, ostream_iterator<int>(cout," "));cout << endl << endl;//binary_search, value = 3cout << "binary_search function, value = 3:" << endl;cout << "3 is " << (binary_search(v.begin(),v.end(),3) ? "":"not ") << "in array." << endl;cout << endl;//binary_search, value = 6cout << "binary_search function, value = 6:" << endl;cout << "6 is " << (binary_search(v.begin(),v.end(),6) ? "":"not ") << "in array." << endl;cout << endl;return 0;
}

array:0 0 0 1 1 1 1 2 2 2 2 3 3 3 4 4 4 5 5 5
lower_bound function, value = 3:[first, itr) = 0 0 0 1 1 1 1 2 2 2 2[itr, last) = 3 3 3 4 4 4 5 5 5upper_bound function, value = 3:[first, itr) = 0 0 0 1 1 1 1 2 2 2 2 3 3 3[itr, last) = 4 4 4 5 5 5equal_range function, value = 3:[vecpair->first, vecpair->second) = 3 3 3binary_search function, value = 3:
3 is in array.binary_search function, value = 6:
6 is not in array.

转载于:https://www.cnblogs.com/Azhu/articles/3898962.html

c/c++:STL之Binary search相关推荐

  1. 1043 Is It a Binary Search Tree(二叉查找树BST)

    1043 Is It a Binary Search Tree 0.题目 A Binary Search Tree (BST) is recursively defined as a binary t ...

  2. 笔试算法题(58):二分查找树性能分析(Binary Search Tree Performance Analysis)

    议题:二分查找树性能分析(Binary Search Tree Performance Analysis) 分析: 二叉搜索树(Binary Search Tree,BST)是一颗典型的二叉树,同时任 ...

  3. 【ACM】二叉搜索树(Binary Search Tree /BS Tree) 小结

    动态管理集合的数据结构--二叉搜索树 搜索树是一种可以进行插入,搜索,删除等操作的数据结构,可以用字典或者优先队列. 二叉排序树又称为二叉查找树,他或者为空树,或者是满足如下性质的二叉树. (1)若它 ...

  4. 二叉搜索树(binary search tree)的建立、删除、查找

    由于输入的数据顺序不同,建立的bst会不一样.最坏的情况就是一个链,所以我们引入了平衡二叉树的概念.这里我们先来看binary search tree.(我随笔里面有一些相关知识) 建立(也就是插入) ...

  5. 查找二叉树中出现次数最多的数 Find Mode in Binary Search Tree

    为什么80%的码农都做不了架构师?>>>    问题: Given a binary search tree (BST) with duplicates, find all the  ...

  6. LeetCode 98. Validate Binary Search Tree--C++解法--判断是否是BST--递归,迭代做法,中序遍历

    LeetCode 98. Validate Binary Search Tree–C++解法–判断是否是BST–递归,迭代做法,中序遍历 LeetCode题解专栏:LeetCode题解 LeetCod ...

  7. LeetCode 426. Convert Binary Search Tree to Sorted Doubly Linked List--转换二叉树为双向链表--Java,C++,Python解法

    题目地址:Convert Binary Search Tree to Sorted Doubly Linked List - LeetCode Convert a BST to a sorted ci ...

  8. LeetCode: 109. Convert Sorted List to Binary Search Tree

    题目 Given a singly linked list where elements are sorted in ascending order, convert it to a height b ...

  9. [LeetCode]: 96: Unique Binary Search Trees

    题目: Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For e ...

最新文章

  1. usaco Canada Tour
  2. python对话框机制_Chromium 新的弹窗机制以及 HTML 的 dialog 元素
  3. diffpatch升级_Linux diff创建补丁以及patch打补丁
  4. d3.js 制作简单的俄罗斯方块
  5. 飞畅科技-工业以太网交换机市场发展情况介绍
  6. 极乐科技CEO应邀出席2017微信小程序生态课
  7. OpenSSL编写SSL,TLS程序
  8. Android 存储路径浅析
  9. python日期选择框_Python的Django框架中设置日期和字段可选的方法
  10. [matlab]元胞数组(使用cellplot显示元胞数组)
  11. 用脚本运行Modelsim教程
  12. ui自动化html模板,webui 自动化 (utx+unitest+HTMLTestRunner_cn)
  13. 服务器托管费用一般是多少
  14. mac 打开网页慢_老Mac电脑打开网页慢怎么办
  15. DOORS和Reqtify — 需求管理和需求追溯工具
  16. 软件开发的12大定律,你是否使用了呢
  17. audio 静音标签
  18. Web开发技术的演变
  19. js之 实现浏览器下载图片保存到本地
  20. putty使用方法~SSH等

热门文章

  1. c语言心形编程代码_做游戏,学编程(C语言) 7 学习EasyX图形交互功能----flappy bird源代码...
  2. mysql 7 for windows_Mysql 5.7 for windows 免安装版(解压版)安装和配置
  3. 全国计算机二级考试c语言指针,全国计算机等级考试二级C语言指针检测试题.doc...
  4. php clearinterval,JavaScript定时函数(2)setInterval与clearInterval
  5. impala java api 操作_Impala实践之六:使用Rest Api
  6. 二位四进制计数器_金三银四还在看JVM这一块?看完这篇万字JVM面试解析就够了...
  7. gis导出栅格数据为什么不能tif_GIS基础操作教程(3)--点数据操作【附带练习数据】...
  8. matlabapp窗口图像_如何在一个matlab窗口上合并两个图像?
  9. 精通lambda表达式:java多核编程_Java8 Lambda表达式和流操作如何让你的代码变慢5倍...
  10. 组播vlan_【参与方式】耗时10小时编撰(下)带你轻松通关组播知识点!