Gibt es eine Variante von min_element, die eine Projektionsfunktion benötigt?

8

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.

    
MSalters 18.07.2013, 09:59
quelle

2 Antworten

4

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?

%Vor% %Vor%     
Konrad Rudolph 18.07.2013, 10:34
quelle
4

Warum nicht ein boost::transform_iterator (das früher projection_iterator_adaptor genannt wurde) von Boost.Iterator-Bibliothek

%Vor%

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).

    
TemplateRex 18.07.2013 10:53
quelle