std::min_element
gibt das kleinste Element zurück, das entweder durch operator<(T,T)
oder durch ein benutzerdefiniertes Prädikat bool Pred(T,T)
definiert wurde. Gibt es eine ähnliche Funktion, die das Element zurückgibt, für das die Projektionsfunktion f(T)->R
den Minimalwert annimmt?
Offensichtlich kann ich bool Pred(t1,t2) { return f(t1) < f(t2); }
definieren, aber das ist ein bisschen unpraktisch, wenn f ein Lambda ist.
Warum definieren Sie nicht einfach einen Prädikatgenerator less_by
, der unter Verwendung eines Lambda einen Funktor zurückgibt, der die Aufgabe für Sie erledigt?
Warum nicht ein boost::transform_iterator
(das früher projection_iterator_adaptor
genannt wurde) von Boost.Iterator-Bibliothek
Der Vorteil gegenüber dem Schreiben eines speziellen weniger Prädikats besteht darin, dass Sie diesen Ansatz für alle anderen Algorithmen verwenden können (z. B. für std::max_element
würden Sie ein spezielles größeres Prädikat usw. benötigen).
Tags und Links algorithm c++ c++11 iterator projection