【问题标题】:sort on a class member got the error unresolved overloaded function type对类成员进行排序得到错误未解决的重载函数类型
【发布时间】:2015-02-28 12:30:06
【问题描述】:
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, )'调用没有匹配函数

请帮帮我,告诉我问题出在哪里。

【问题讨论】:

    标签: c++ sorting


    【解决方案1】:

    从您的程序看来,您想要对 S 类的对象进行排序。在这种情况下,您的向量应该是这样的:std::vector&lt;S&gt;

    您的cmpS 类的非静态成员函数,因此std::sort 无法使用它。 (想想你将如何使用这个功能)。

    您可以为您的类重载 &lt; 运算符或传递独立/静态成员函数,或者您可以使用 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 &gt; rhs 的 C++11 lambda 调用 std::sort

    std::sort(ia.begin(), ia.end(), [](int x, int y) { return x > y; });
    

    【讨论】:

    • 是的,我想对 S 类的对象进行排序。如果使用 lambda 表达式会是什么样子?
    • 答案已编辑。看看如何将比较函数作为 lambda 传递给sort 例程。
    【解决方案2】:

    您的S::cmp() 采用S,但S::ia 的值类型是int

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-19
      • 1970-01-01
      • 2013-02-20
      • 1970-01-01
      • 2020-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多