为什么std :: equal_to有用?

时间:2015-09-29 17:54:43

标签: c++ c++11

C ++标准库提供std::equal_to。默认情况下,此函数对象在类型operator==上调用T

使用std::equal_to有什么好处?你能提供std::equal_to有用的例子吗?

4 个答案:

答案 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_productstd::find_first_ofstd::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; }