您的位置:首页

STL_算法_查找算法(binary_search、includes)

2017-06-05 19:54 288 查看

C++ Primer 学习中。。



简单记录下我的学习过程 (代码为主)

全部容器适用(O(log(n))) 已序区间查找算法



binary_search //二分查找。返回bool值,




includes //包括查找,返回bool值。



#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
using namespace std;
/*****************************************
//全部容器适用(O(log(n)))
已序区间查找算法
binary_search()             //二分查找。返回bool值,
includes()                  //包括查找,返回bool值。
*****************************************/
/*************************************************************************************
std::binary_search              全部排序容器适用                           algorithm
--------------------------------------------------------------------------------------
template <class ForwardIterator, class T>
bool binary_search ( ForwardIterator first, ForwardIterator last,
const T& value );

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

//eg:
template <class ForwardIterator, class T>
bool binary_search ( ForwardIterator first, ForwardIterator last, const T& value )
{
first = lower_bound(first,last,value);
return (first!=last && !(value<*first));
}
*************************************************************************************/

/*************************************************************************************
std::includes                   全部排序容器适用                           algorithm
--------------------------------------------------------------------------------------
template <class InputIterator1, class InputIterator2>
bool includes ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2 );

template <class InputIterator1, class InputIterator2, class Compare>
bool includes ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2, Compare comp );

//eg:
template <class InputIterator1, class InputIterator2>
bool includes ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2 )
{
while (first1!=last1)
{
if (*first2<*first1) break;
else if (*first1<*first2) ++first1;
else { ++first1; ++first2; }
if (first2==last2) return true;
}
return false;
}
*************************************************************************************/

bool myfunction (int i,int j)  { return (i<j);}

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 myfunction as comp:
sort (v.begin(), v.end(), myfunction);

cout << "looking for a 6... ";
if (binary_search (v.begin(), v.end(), 6, myfunction))
cout << "found!\n"; else cout << "not found.\n";
cout<<endl;
/**----------------------------------------------------------------------------------**/
int container[] = {5,15,10,25,20,35,30,50,45,40};
int continent[] = {40,30,20,10};

sort (container,container+10);
sort (continent,continent+4);

// using default comparison:
if ( includes(container,container+10,continent,continent+4) )
cout << "container includes continent!" << endl;

// using myfunction as comp:
if ( includes(container,container+10,continent,continent+4, myfunction) )
cout << "container includes continent!" << endl;

return 0;
}

/*****
Output
looking for a 3...  found!
looking for a 6... not found.

container includes continent!
container includes continent!

*/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: