带有嵌套私有结构和自己的比较函数的std排序向量

时间:2013-09-24 09:10:56

标签: c++ sorting stl

我有以下课程

class foo{
    private:
    struct bar{
        double rng;
        ...
    };
    struct baz{
        bar abar;
        ...
    };
    void foobar();
    static bool cmp(baz a, baz b);
    ...
};

cmp函数执行以下操作:

bool foo::cmp(baz a, baz b){
    return (a.abar.rng < b.abar.rng);
}

现在我想在foobar函数内部进行排序:

void foo::foobar(){
    std::vector<baz> aVec;
    // fill aVec
    std::sort(aVec.begin(), aVec.end(), cmp);
}

这给出了很多编译错误,第一个是:

> stl_algo.h: no match for call to '(__gnu_cxx::_normal_iterator<foo::baz*,
> std::vector<foo::baz> >) (foo::baz&, foo::baz&)'

怎么了?

2 个答案:

答案 0 :(得分:1)

在您的实际代码中,看起来您正在传递迭代器而不是比较函数:

  

(__gnu_cxx::_normal_iterator<foo::baz*, std::vector<foo::baz> >) (foo::baz&, foo::baz&)'

它正在尝试使用要比较的元素调用迭代器。这不起作用。

您展示的代码是正确的,但是:http://ideone.com/pwo5Cu

答案 1 :(得分:0)

您显示的代码编译得很好。猜测一下,在您的实际代码中cmp会解析为foo::cmp以外的其他内容,从而引发相关错误。