使用set find函数,找不到运算符

时间:2015-01-17 15:39:32

标签: c++ dictionary compiler-errors set operators

我需要你的帮助来解决下一个问题。所以问题是,当我在集合(数据结构)上使用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;
}
}

1 个答案:

答案 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。它更短更清晰。