有关C ++ std :: sort()中比较函数的问题

我给了2个向量:

vector<int> arrive; 
vector<int> depart;

arrive [i]和depart [i]代表不同人的到达和离开时间。我的任务是发现在任何时间点,人数不得超过K(给定)。

为此,我做了一个vector<pair<int,int>> arr_dep_time。该数组存储了到达和离开数组的所有点。 pair.first用于存储到达/离开的时间,pair.second用于存储到达点(即0)或出发点(即1)的时间。

然后我使用了std::sort(arr_dep_time.begin(),arr_dep_time.end(),comparator) 我希望如果我有重复的时间,应该将出发时间放在第一位。例如,如果存在{5,0}和{5,1},则应将{5,1}放在{5,0}之前。 因此,我编写了比较器,如下所示:

bool comparator(pair<int,int> p1,pair<int,int> p2){
    if(p1.first==p2.first)
      return p1.second>p2.second;

    return p1.first<p2.first;
}

但是在某些情况下,这给了我错误的结果。 但是,当我把pair.second作为 0:出发 1:到达 并按如下方式编写了comapartor,它给了我正确的结果。

bool comparator(pair<int,int> p2){
    if(p1.first==p2.first)
      return p1.second<p2.second;
    return p1.first<p2.first;
} 

谁能告诉我为什么?

  

我没有包括完整的解决方案。   感觉是必要的。

qingfeng710 回答:有关C ++ std :: sort()中比较函数的问题

既然您使用的是c ++ 14,也许您可​​以使用lambda吗?

std::sort(arr_dep_time.begin(),arr_dep_time.end(),[] (auto &p1,auto &p2){
    return (p1.first==p2.first) ? p1.second < p2.second : p1.first < p2.first;
});

?

本文链接:https://www.f2er.com/3118271.html

大家都在问