通过第一元素对对进行排序

时间:2016-03-09 07:25:30

标签: c++

#include<cstdio>
 #include<vector>
 #include<algorithm>
using namespace std;

 struct myclass
{
    bool operator()(pair<int,int> &left, pair<int,int> &right)
    {
        return (left.first < right.first);
    }
 } x;

int main()
{
     int i;
     vector<pair<int,int> > a;
    a.push_back(make_pair(1,2));
    a.push_back(make_pair(1,0));
    a.push_back(make_pair(2,2));
    a.push_back(make_pair(2,1));
     a.push_back(make_pair(3,2));
    a.push_back(make_pair(1,5));

sort(a.begin(),a.end(),x);
for(i=0;i<6;i++)
{
    printf("%d %d\n",a[i].first,a[i].second);
}
return 0;
}

我的代码排序第一个元素对的矢量有什么问题? 它在'x'之前给出了[Error]期望的primary-expression。

1 个答案:

答案 0 :(得分:1)

Live example

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;
using IntPair = pair<int, int>;

int main()
{
    vector<IntPair> a = {
        make_pair(1,2),
        make_pair(1,0),
        make_pair(2,2),
        make_pair(2,1),
        make_pair(3,2),
        make_pair(1,5)
    };

    sort(a.begin(), a.end(), [](const IntPair &left, const IntPair &right)
         {
             return (left.first < right.first);
         });

    for(auto const & i : a)
    {
        cout << i.first << ' ' << i.second << '\n';
    }
}

您不需要已定义的类,也不需要全局变量x。使用现代C ++,您不必明确定义functionoidfunctor,只需使用lambda