Es soll in erster Linie als Vorlagenparameter an einen Algorithmus übergeben werden. Sie können keinen Operator als Vorlageparameter angeben, Sie können jedoch eine Funktion angeben. Typische Anwendung wäre so etwas wie:
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;
}
Wenn Sie (zum Beispiel) eine Struktur von einer Art, die mehrere Felder enthält, könnten Sie eine Vergleichsfunktion mögen, die nur ein paar bestimmten Felder vergleichen, die die Identität angeben, wie als den Namen einer Person, aber ignorieren andere Felder wie ihr aktuelles Gewicht, Gehalt, usw. In solch einem Fall würden Sie diese Vergleichsfunktion als Vorlageparameter übergeben und in der Lage sein, nur die Felder zu vergleichen, die Ihnen wichtig sind.
In anderen Fällen, in denen Sie beispielsweise mit einem Array von Ganzzahlen suchen, können Sie die Standardvergleichsfunktion verwenden.
Sie können '==' nicht an eine Funktion übergeben, aber Sie können 'std :: equal_to' übergeben. – Nawaz
Es ist ein wenig historisch, da Sie auch '[] (auto a, auto b) {return a == b; } ' – MSalters
@MSalters: Ist nicht std :: equal_to Template-definiert, um genau das zu sein? Oder zumindest, '[] (const T & a, const U & b) {zurück a == b; } '? – einpoklum