根据特定字段对struct的向量进行排序

时间:2013-11-23 19:46:35

标签: c++ sorting

目前我正在尝试根据特定字段对结构体的矢量进行排序。我已经设置了一个自定义比较函数来使用sort函数。但是,我收到了一些错误。

代码:

    struct Play{
      int min, down, yard, locat;
      string Description, offname, defname;
      double relevance;
     };

    bool customCompare(const Play &x, const Play &y)
    {
        return (x.relevance < y.relevance);
    }

    void printResults()
    {
        sort(vecData.begin(),vecData.end(), customCompare);
    }`

错误:

    error C3867: 'List::customCompare': function call missing argument list; use '&List::customCompare' to create a pointer to member
    error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided

3 个答案:

答案 0 :(得分:4)

a)使用带有lambda表示法的sort函数,如下所示(如果你使用的是c ++ 11)

 sort(vecData.begin(),vecData.end(), [](const Play &x, const Play &y){ return (x.relevance < y.relevance);});

工作代码:

http://ideone.com/bDOrBV

b)使比较器功能为静态

http://ideone.com/0HsaaH

答案 1 :(得分:2)

static bool customCompare(const Play &x, const Play &y)

答案 2 :(得分:0)

尽管这是一个古老的问题,但我想指出的是,为了将来的读者受益,可以在即将到来的Ranges库中的 projections 的帮助下根据特定字段直接进行排序。 C ++ 20:

ranges::sort(vecData, ranges::less, &Play::relevance);

这避免了指定两个迭代器或编写自定义比较函数或lambda的需要。