【问题标题】:Cannot compile comparison function for vector of pointers无法编译指针向量的比较函数
【发布时间】:2014-06-06 16:31:04
【问题描述】:

我有以下设置:

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   

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

【问题讨论】:

  • 我认为您的意思是 std::max_element 而不是 std::max
  • 我会去上吊。这正是我想要的,我什至从参考资料中查看了正确的功能。啊……

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-04
      • 2012-10-05
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 2018-12-28
      • 1970-01-01
      相关资源
      最近更新 更多