C++11 当向量按其第一个值排序时,对成对向量使用二进制搜索 #包括 #包括 #包括 #包括 使用名称空间std; 布尔公司(常数对和a、常数对和b) { 返回(a.第一次

C++11 当向量按其第一个值排序时,对成对向量使用二进制搜索 #包括 #包括 #包括 #包括 使用名称空间std; 布尔公司(常数对和a、常数对和b) { 返回(a.第一次,c++11,stl-algorithm,C++11,Stl Algorithm,您可以在结构中为(pair,int)和(int,pair)定义比较,这样二进制搜索中的比较就知道如何将pair与int进行比较: #include <iostream> #include <vector> #include <utility> #include <algorithm> using namespace std; bool comp(const pair<int,int> &a,const pair<int,i

您可以在结构中为
(pair,int)
(int,pair)
定义比较,这样二进制搜索中的比较就知道如何将pair与int进行比较:

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
bool comp(const pair<int,int> &a,const pair<int,int> &b)
{
    return (a.first < b.first);
}

int main(void)
{
    vector<pair<int,int>> data;
    data.push_back(make_pair(1,7));
    data.push_back(make_pair(5,5));
    data.push_back(make_pair(2,7));
    data.push_back(make_pair(6,7));
    data.push_back(make_pair(9,6));
    data.push_back(make_pair(2,4));
    data.push_back(make_pair(2,8));
    sort(data.begin(),data.end());
    int key=9;
    if(binary_search(data.begin(),data.end(),key,comp))
    {
        cout<<"Key found"<<endl;
    }
    else
    {
        cout<<"Key is not found"<<endl;
    }
}
#包括
#包括
#包括
#包括
使用名称空间std;
结构组件对{
布尔运算符()
{
返回(a.第一次cout您可以在结构中为
(pair,int)
(int,pair)
定义比较,这样二进制搜索中的比较就知道如何将pair与int进行比较:

#include <iostream>
#include <vector>
#include <utility>
#include <algorithm>
using namespace std;
bool comp(const pair<int,int> &a,const pair<int,int> &b)
{
    return (a.first < b.first);
}

int main(void)
{
    vector<pair<int,int>> data;
    data.push_back(make_pair(1,7));
    data.push_back(make_pair(5,5));
    data.push_back(make_pair(2,7));
    data.push_back(make_pair(6,7));
    data.push_back(make_pair(9,6));
    data.push_back(make_pair(2,4));
    data.push_back(make_pair(2,8));
    sort(data.begin(),data.end());
    int key=9;
    if(binary_search(data.begin(),data.end(),key,comp))
    {
        cout<<"Key found"<<endl;
    }
    else
    {
        cout<<"Key is not found"<<endl;
    }
}
#包括
#包括
#包括
#包括
使用名称空间std;
结构组件对{
布尔运算符()
{
返回(a.第一次cout这主要是名称的问题。
binary\u search
搜索元素,因此需要提供一个元素

还有一个
std::partition_point(begin,end,predicate)
,它假设一个分区范围。如果一个范围内有一个点,使得它前面的所有元素满足谓词,后面的元素不满足谓词,则对该范围进行分区。(任何一个子范围都可以为空)


现在,如果将排序谓词与任何值绑定,则任何已排序的范围也会被划分。例如,范围
1,5,8
value划分,这主要是名称问题。
binary\u search
搜索元素,因此需要提供元素

还有一个
std::partition_point(begin,end,predicate)
,它假设一个分区范围。如果一个范围内有一个点,使得它前面的所有元素满足谓词,后面的元素不满足谓词,则对该范围进行分区。(任何一个子范围都可以为空)


现在,如果您将排序谓词与任何值绑定,则任何已排序的范围也会被划分。例如,范围
1,5,8
value划分实际上,向量是由这两个值进行排序的。(2,4)严格地位于(2,8)之前。您没有使用
comp
进行排序,这将产生(2,4)和(2,8)等价地,向量按两个值排序。(2,4)严格地位于(2,8)之前。您没有使用
comp
进行排序,这将使(2,4)和(2,8)相等