c++11 - 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 自动生成的。
知道我能做什么吗?
解决方案
问题是std::map
它将尝试索引映射的元素,并且它不知道如何索引my_msgs::Nodelet
,因为它不知道如何比较这个对象。
您必须在声明此映射时提供第三个参数,使用比较函数,或实现必要的接口(运算符的处理程序<
)以使用默认比较方法。
但是你也可以通过使用std::unordered_map
来避免这个麻烦。
std::unordered_map
会做几乎相同的事情std::map
,但它不会费心索引元素。在许多情况下,这种方法也被认为更快。
推荐阅读
- c++ - 用于生成核心文件的 C++ 代码,就像 gdb >> gcore 一样
- javascript - CoreUI 一次只有一个下拉菜单
- asp.net-mvc-5 - @html.dropdown onchange 事件 MVC5
- batch-file - 在 for 循环中使用内置命令失败
- python - 在 Pandas 中查找重复列的重复位置
- vba - UFT 14.00 如何在不同的操作中使用函数的属性
- angular - ionic 3 - 单击 ion-toggle 后显示确认警报
- python-3.x - Pandas 安装无法识别 C++ 安装
- python - Mongodb 与 django 使用 djongo?
- typeerror - pyautogui.center,TypeError:“NoneType”对象不可订阅