C ++标准库提供std::equal_to
。默认情况下,此函数对象在类型operator==
上调用T
。
使用std::equal_to
有什么好处?你能提供std::equal_to
有用的例子吗?
答案 0 :(得分:38)
用于算法。它提供了一个带有operator()的仿函数,因此可以一般使用。
具体(和人为)的例子,如评论中所述:
$("#YOUR_ELEMENT_ID").hover(function(e)
{
$(this).css({"border": "solid red 2px"})
}, function(e)
{
$(this).css({"border": "none"})
});
不确定谁可能需要它,但这只是一个例子。
答案 1 :(得分:21)
使std::equal_to
非常有用,因为它允许将相等比较用作函子,这意味着它可以作为参数传递给模板和函数。这是等于运算符==
无法实现的,因为运算符根本无法作为参数传递。
例如,考虑如何将其与std::inner_product
,std::find_first_of
和std::unordered_map
一起使用。
答案 2 :(得分:9)
主要用于作为模板参数传递给算法。您不能将运算符指定为模板参数,但可以指定函数。典型用法如下:
template <class compare = std::equal_to<>, class T, class InIter>
bool contains(InIter begin, InIter end, T value, compare cmp={}) {
for (InIter p = begin; p != end; ++p)
if (cmp(*p, value))
return true;
return false;
}
如果您(例如)某种类型的结构包含多个字段,您可能需要一个比较函数,该函数仅比较指示身份的几个特定字段,例如人名,但忽略其他字段,例如在这种情况下,您将该比较函数作为模板参数传递,并且只能比较您关注的字段。
对于您正在处理的其他情况,例如,搜索整数数组,您可以使用默认比较函数。
答案 3 :(得分:8)
现在,事实并非如此。在lambdas之前,它可用作调用==
的函数形式,用于标准算法调用。现在你只需写[](auto& x, auto& y) { return x == y; }
。