为什么std :: equal_to有用?

C ++标准库提供了std::equal_to 。 这个函数对象默认调用Ttypes的operator==

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

用于algorithm。 它提供了operator()函子,因此可以一般使用。

具体的(和人为的)例子,如在评论中所问:

 // compare two sequences and produce a third one // having true for positions where both sequences // have equal elements std::transform(seq1.begin(), seq1.end(), seq2.begin(), std::inserter(resul), std::equal_to<>()); 

不知道谁可能需要它,但它是一个例子。

拥有std::equal_to是非常有用的,因为它允许将相等比较用作std::equal_to函数,这意味着它可以作为parameter passing给模板和函数。 这是相等运算符==不可能的,因为运算符不能作为parameter passing。

例如,考虑如何使用std::inner_productstd::find_first_ofstd::unordered_map

它的主要目的是作为模板parameter passing给algorithm。 您不能将运算符指定为模板参数,但可以指定一个函数。 典型的使用会是这样的:

 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; } 

如果您有(例如)某种包含多个字段的结构,则您可能需要一个比较函数,该函数仅比较指示身份的几个特定字段(如个人姓名),但忽略其他字段,例如其当前重量,薪酬等级等。在这种情况下,您可以将该比较函数作为模板parameter passing,并且只能比较您关心的字段。

对于其他情况下,例如search整数数组,可以使用默认的比较函数。

这些天,这不是真的。 在lambdaexpression式之前,它可以用作调用==的函子forms,用于标准algorithm调用。 现在你只需要写[](auto& x, auto& y) { return x == y; } [](auto& x, auto& y) { return x == y; }