我需要你的帮助来解决下一个问题。所以问题是,当我在集合(数据结构)上使用find函数时,我遇到了以下问题(.find make problem因为其中一个运算符>,<,==)。
错误C2679:二进制'<' :找不到带有'const Item'类型的右手操作数的运算符(或者没有可接受的转换
代码中发生错误的行 -
if(items.find(itemList[option]) == items.end())
{
items.insert(itemList[option]);
}
我的运营商(==,<,>) -
bool Item::operator<(Item& other) const
{
if (this->_serialNumber < other._serialNumber)
{
return true;
}
else
{
return false;
}
}
bool Item::operator>(Item& other) const
{
if (this->_serialNumber > other._serialNumber)
{
return true;
}
else
{
return false;
}
}
bool Item::operator==(Item& other) const
{
if (this->_serialNumber == other._serialNumber)
{
return true;
}
else
{
return false;
}
}
答案 0 :(得分:2)
您的操作员需要通过const ref:
获取参数bool Item::operator<(const Item& other) const
你可以自由地从非const到const,但不是相反,std::set
试图比较const T.。
P.S:您可以将所有这些缩短为return _serialNumber > other._serialNumber;
,不需要if / else。它更短更清晰。