使用<algorithm> </algorithm>对结构矢量进行排序

时间:2014-06-15 17:08:14

标签: c++ algorithm sorting vector struct

我知道已有关于它的问题,并且我遵循了所有的提示,但它仍然不起作用,所以我会很高兴知道什么是错的。

我有这个结构:

struct Scores
{
    int _score;
    std::string _name;
};

我希望通过_score对矢量进行排序 - 从高到低。这就是我写的:

std::sort (_scores.begin(), _scores.end(), myFunction);

我有这个功能:

bool myFunction (const struct Scores &i, const struct Scores &j)
    {return i._score>j._score;}

我已经包含了算法,所以我真的不知道是什么问题。我收到这些错误:

error C3867: 'HighScores::myFunction': function call missing argument list;
error C2780: 'void std::sort(_RanIt,_RanIt)' : expects 2 arguments - 3 provided

谢谢

2 个答案:

答案 0 :(得分:0)

在您的示例中,myFunction看起来像是成员类函数。它必须是静态的,才能成为std::sort算法的正确谓词。或者,您可以使此功能成为免费的优秀功能。

或者你可以制作一个仿函数

struct Sorter {
  bool operator ()( const Scores &o1, const Scores &o2) {
      return o1._score > o2._score;
  }
};

并将此实例传递给算法:

std::sort ( _scores.begin(), _scores.end(), Sorter());

答案 1 :(得分:0)

除了@bits_international,你也可以像在C ++ 11中那样做。

std::sort(_scores.begin(), _scores.end(), [](const Score& a, const Score& b) {
    return a._score > b._score;
});

我希望它有所帮助。