为什么编译器说我不能将一个Item插入到std :: set <item>?</item>中

时间:2015-01-08 16:59:56

标签: c++ stl insert set operator-keyword

我有一个名为“Item”的类,我正在尝试将项目插入到一组项目中。

std::set<Item>::iterator it;
_items.insert(it, newItem);

但它给了我这个奇怪的错误

Error   1   error C2678: binary '<' : no operator found which takes a left-hand operand of type 'const Item' (or there is no acceptable conversion)

即使我确实实现了这个操作符。

bool Item::operator<(Item& other)
{
    return _serialNumber < other._serialNumber;
}

我不明白为什么我在这个函数中需要这个运算符。

有人知道问题是什么吗?

提前致谢!

2 个答案:

答案 0 :(得分:4)

您应该将定义更改为: -

bool Item::operator<( const Item& other)  const
                      ^^^^^               ^^^^^
{
    return _serialNumber < other._serialNumber;
}

答案 1 :(得分:0)

  

“我不明白为什么我在这个函数中需要这个运算符。”

这是因为您需要确保在Item类的 rvalue 实例上调用此运算符函数。这是std::set Item(和其他容器类,其中{{1}}应该用作键)。