无法编译指针向量的比较函数

时间:2014-06-06 16:31:05

标签: c++ higher-order-functions stl-algorithm

我有以下设置:

std::vector<Data2DController*> controllers2d; // this is defined in the header 

        bool comp(const Data2DController* c1, const Data2DController* c2) {
        return true;
    };

    inline std::vector<Visualizer*> MainController::gatherVisualizers() const {
        std::vector<Visualizer*> visualizers;

        // selected only the biggest cooridante system
        Data2DController* biggestRadiusController = *std::max(controllers2d.begin(), controllers2d.end(), comp);

        visualizers.push_back(biggestRadiusController->getCoordinatesVisualizer());

        return visualizers;
    }

目前我的功能看起来像这样,其他一切都是为了简单起见而注释掉的。

不幸的是,我收到以下错误(两个输入参数有4个相同的错误):

Error   5   error C2664: 'bool (Controllers::Data2DController *,Controllers::Data2DController *)' : cannot convert argument 1 from 'const std::_Vector_const_iterator<std::_Vector_val<std::_Simple_types<Controllers::Data2DController *>>>' to 'Controllers::Data2DController *'  C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\xutility 521 1   

我不知道为什么它没有编译,所有我能找到的比较函数的例子都传递给应用于指针矢量的算法看起来几乎相同。

2 个答案:

答案 0 :(得分:2)

std::max(controllers2d.begin(), controllers2d.end(), comp);将比较迭代器(并且comp将比较元素(在您的情况下为指针),因此编译错误。)

std::max_element(controllers2d.begin(), controllers2d.end(), comp);会比较指针(comp)。

答案 1 :(得分:1)

std::max返回两个值之间的最大值,它不是容器算法。

使用std::max_element查找范围的最大值。

*std::max_element(controllers2d.begin(),controllers2d.nd(),comp)

http://en.cppreference.com/w/cpp/algorithm/max_element