c++ - 无法为指针 vector 编译比较函数

标签 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   

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

最佳答案

std::max(controllers2d.begin(), controllers2d.end(), comp); 会比较迭代器(而 comp 会比较元素(指针在你的情况下)所以编译错误)。

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

关于c++ - 无法为指针 vector 编译比较函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24086677/

相关文章:

c++ - 使用字符串流获取行分隔符

perl - 为什么映射的参数之间不需要逗号?

javascript - 函数局部变量中 JavaScript 范围的总和

Javascript:访问高阶函数中的对象范围成员

c++ - STL-Sort 未按预期工作

c++ - 为什么不为 std::tuple 重载 STL 算法?

c++ - 要求虚函数覆盖使用 override 关键字

c++ - 为什么 glm::frustumLH_ZO 的值 [2][0] 和 [2][1] 被求反?

c++ - 将 LLVM 位码加载到模块 : cannot convert ‘std::unique_ptr<llvm::Module>’ to ‘llvm::Module*’

c++ - 在 bitset 中随机选择 set bit 位置的最佳 C++ 方法