我在使用sort函数时遇到了一些麻烦...这是我的代码:class Parola {public: string s; int repetition; bool operator()(const Parola *x, const Parola *y) { return x->repetition > y->repetition; }};int main(int argc, char** argv) { ... vector<Parola> p; ... some insertions here ... sort(p.begin(), p.end(), Parola()); ... return 0;}为什么我不能没有错误地编译它?非常感谢!PS:我只会向您展示前50行错误中的前三行:/usr/include/c++/4.2.1/bits/stl_algo.h: In function 'const _Tp& std::__median(const _Tp&, const _Tp&, const _Tp&, _Compare) [with _Tp = Parola, _Compare = Parola]':/usr/include/c++/4.2.1/bits/stl_algo.h:2795: instantiated from 'void std::__introsort_loop(_RandomAccessIterator, _RandomAccessIterator, _Size, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Parola*, std::vector<Parola, std::allocator<Parola> > >, _Size = long int, _Compare = Parola]'/usr/include/c++/4.2.1/bits/stl_algo.h:2866: instantiated from 'void std::sort(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<Parola*, std::vector<Parola, std::allocator<Parola> > >, _Compare = Parola]' 最佳答案 为OP提供一些选项供您选择:(注意:不详尽)选项1:内部运算符class Parola {public: string s; int repetition; bool operator<(const Parola& x) const { return repetition < x.repetition; }}使用默认的std::less 模板调用。sort(p.begin(), p.end());选项2:内部函数operator()():class Parola {public: string s; int repetition; bool operator()(const Parola& x, const Parola& y) const { return x.repetition < y.repetition; }}正如dasblinken指出的那样,使用可选的比较对象调用,很奇怪,但可以:std::sort(p.begin(), p.end(), Parola());选项3:外部运算符bool operator <(const Parola& x, const Parola& y){ x.repetition < y.repetition;}像(1)一样,它使用默认的std::less 比较器,但是要求外部运算符也必须是Parola类的 friend ,才能声明私有(private)数据成员的访问权限(如果声明为此类)。它的用法与(1)相同。选项4:外部函子class CompareParola{public: bool operator ()(const Parola& x, const Parola& y) const { return x.repetition < right.repetition; }};并由:std::sort(p.begin(), p.end(), CompareParola());像(3)一样,如果所访问的成员是私有(private)的,则CompareParola类必须与Parola成为友好对象:选项5:外部功能bool ParolaLess(const Parola& x, const Parola& y){ return x.repetition < y.repetition;}与外部运算符或外部功能类相似,这也需要与对象类成为友好对象才能访问私有(private)成员。像这样调用:std::sort(p.begin(), p.end(), ParolaLess);选项6:静态类功能class Parola {public: string s; int repetition; static bool Less(const Parola& x, const Parola& y)   { return x.repetition < y.repetition; }};它经常未被充分利用,并具有很好的属性,可以访问所有对象成员变量,包括私有(private)变量(显然,它是使用类定义的)。您可以这样做:std::sort(p.begin(), p.end(), Parola::Less)请注意,这与(1)和(2)一样,将所有内容保留在类中。在所有这些中,我更喜欢(1)的简单性和(4)的独立性,但是每个人都有自己的品味。有时候(5)或(6)确实派上用场(我是(6)的个人粉丝)。如果您能想到更多并让代表进行编辑,请根据需要进行更新。请尝试使它们至少在某种程度上有用= P关于c++ - 在C++中对类的 vector 进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12787165/
10-11 08:55