zl程序教程

您现在的位置是:首页 >  后端

当前栏目

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

算法 查找 STL search Binary
2023-09-11 14:15:00 时间

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!

*/