![](/img/trans.png)
[英]error: no matching function for call to 'sort(…, …, <unresolved overloaded function type>)'
[英]sort on a class member got the error unresolved overloaded function type
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,)'
請對此提供幫助,並告訴問題出在哪里。
從您的程序看來,您想要對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
向量進行排序,只需使用返回lhs > rhs
的C ++ 11 lambda調用std::sort
。
std::sort(ia.begin(), ia.end(), [](int x, int y) { return x > y; });
您的S::cmp()
接受S
,但S::ia
的值類型為int
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.