我是C ++菜鸟,所以如果你发现这个问题,请不要小心
我在下面用C ++声明地图:
std::map<CartesianLocation, std::list<RadioSignal<RadioDevice>>> radioMap;
完整代码:
不知道但是使用下面的代码,我能够解决我的问题类RadioMap:public std :: iterator_traits,public Cloneable { 私人:
std::map<const CartesianLocation*, const std::list<RadioSignal<RadioDevice>>*> radioMap;
std::vector<RadioDevice> radioDevices;
公共: void add(const CartesianLocation * location,const std :: list&gt; * observedSignals){ radioMap [location] = observedSignals; }
在这一行radioMap[location] = observedSignals;
上,我以此错误结束了
“二进制表达式的操作数无效('const CartesianLocation'和 'const CartesianLocation')“在struct _LIBCPP_TYPE_VIS_ONLY上: binary_function&lt; _Tp,_Tp,bool&gt; { _LIBCPP_CONSTEXPR_AFTER_CXX11 _LIBCPP_INLINE_VISIBILITY bool operator()(const _Tp&amp; __x,const _Tp&amp; __y)const {return __x&lt; __y;}};
知道我哪里错了吗?
答案 0 :(得分:2)
您没有为std::map
提供比较器,因此它使用std::less
。但是std::less
CartesianLocation
并没有超载(而CartesianLocation
没有operator<
),所以你会收到错误。
您可以添加operator<
:
struct CartesianLocation
{
//Other stuff
bool operator<(const CartesianLocation& loc2)
{
//Return true if this is less than loc2
}
};
另一种方法是定义自定义比较器,例如:
struct comp
{
bool operator()(const CartesianLocation& loc1, const CartesianLocation& loc2)
{
//Compare the 2 locations, return true if loc1 is less than loc2
}
};
然后您可以将其传递给std::map
:
std::map<CartesianLocation, std::list<RadioSignal<RadioDevice>>, comp> radioMap;