请在下面的代码段中,如果有人可以澄清bool operator<...
的功能是什么以及为何将其用作函数?
bool operator<(const RankedFace& other) const
{
if (lastDelay == other.lastDelay)
return face.getId() < other.face.getId();
return lastDelay < other.lastDelay;
}
答案 0 :(得分:4)
这是用户定义类型operator<
的(在类中)定义(我猜是RankedFace
)。
由于该代码,您可以将RankedFace
类型的两个对象与<
进行比较,例如if( r1 < r2 ) // do something...
答案 1 :(得分:2)
它为类型RankedFace
提供了一个小于比较(operator<
)。如宣布;它看起来像一个成员方法。它也可能是具有以下签名的非成员方法;
bool operator<(const RankedFace& lys, const RankedFace& rhs)
通常需要在标准库关联容器(std::set
等)中使用。
关联容器需要比较器来对其中的对象进行排序。可以使用自定义比较器,但标准比较器为std::less
,它只是lhs < rhs
。
它允许客户端代码在该类型的对象(face1 < face2
)上使用少于比较。它通常(并非总是)与其他比较器(==
,!=
,<=
等)一起实施。如果已实施operator<
和operator==
,则可以使用std::rel_ops
实施剩余的{{1}}。
答案 2 :(得分:1)
这是RankedFace
的{{3}}。它比较了两个RankedFace
个对象。例如:
RankedFace foo;
RankedFace bar;
cout << foo < bar ? "foo is smaller than bar" : "bar is greater than or equal to foo";
在上面的代码foo < bar
导致C ++调用foo.operator<(bar)
。
RankedFace::operator<
的解剖揭示了它:
lastDelay
成员的对象视为较小的对象lastDelay
s的对象,它会将对象返回较小的getId()
较小的对象。 RankedFace
之间的实际代码比较可能不存在。实施小于运营商的动机可能是小于运营商需要在less than operator或associative container中的密钥中使用RankedFace
。