首页 > 解决方案 > C++ - 'operator<' 不匹配

问题描述

我有以下地图:

std::map<my_msgs::Nodelet, int> mRunningProcPID;

尝试将新对插入地图时,出现以下错误:

error: no match for ‘operator<’ (operand types are ‘const my_msgs::Nodelet_<std::allocator<void> >’ and ‘const my_msgs::Nodelet_<std::allocator<void> >’)
       { return __x < __y; }

我知道我需要覆盖 my_msgs::Nodelet 的 < 运算符,问题是我无权访问该 h 文件,因为它是由 ROS 自动生成的。

知道我能做什么吗?

标签: c++11stloperator-overloadingrosstdmap

解决方案


问题是std::map它将尝试索引映射的元素,并且它不知道如何索引my_msgs::Nodelet,因为它不知道如何比较这个对象。

您必须在声明此映射时提供第三个参数,使用比较函数,或实现必要的接口(运算符的处理程序<)以使用默认比较方法。

但是你也可以通过使用std::unordered_map来避免这个麻烦。

std::unordered_map会做几乎相同的事情std::map,但它不会费心索引元素。在许多情况下,这种方法也被认为更快。


推荐阅读