class S {
public:
vector <int> ia;
int rank;
bool cmp(S const &s1, S const &s2) {
return (s1.rank > s2.rank);
}
void sort_on_rank() {
sort(ia.begin(), ia.end(), cmp);
}
};
这段代码试图在排名上对矢量进行排序,但由于跟随错误而无法编译,
[错误]没有匹配函数调用'sort(std :: vector :: iterator,std :: vector :: iterator,)'
请帮我解释一下这个问题。
答案 0 :(得分:4)
从您的程序中,您似乎想要对S
类的对象进行排序。在这种情况下,你的矢量应该是这样的:std::vector<S>
。
您的cmp
是类S
的非静态成员函数,因此std::sort
无法使用它。 (想想你将如何使用该功能)。
您可以为您的类重载<
运算符,也可以传递独立/静态成员函数,也可以使用C ++ 11 lambda表达式。
因此你的班级成为:
class S {
public:
vector<S> ia;
int rank;
void sort_on_rank() {
sort(ia.begin(), ia.end(),
[] (S const &s1, S const &s2) {
return (s1.rank > s2.rank);
});
}
};
但是,如果您只想按降序对包含int
的向量进行排序,只需使用返回std::sort
的C ++ 11 lambda调用lhs > rhs
。
std::sort(ia.begin(), ia.end(), [](int x, int y) { return x > y; });
答案 1 :(得分:1)
您的S::cmp()
需要S
,但S::ia
的值类型为int
。