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

Cannot compile comparison function for vector of pointers

本文关键字:编译 比较 函数 向量 指针      更新时间:2023-10-16

我有以下设置:

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.0VCincludexutility 521 1   

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

std::max(controllers2d.begin(), controllers2d.end(), comp);将比较迭代器(comp将比较元素(在您的例子中是指针),因此编译错误)。

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

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

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

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

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