簡體   English   中英

對類成員進行排序時得到錯誤未解決的重載函數類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM