Ich habe std::map<int, std::pair<short, float> >
, und ich muss die minimale short
in dieser Map finden. Wie kann ich boost::bind
mit std::min_element()
dafür verwenden?
boost::lambda
?
Der map
Iterator gibt Ihnen eine pair
wobei first
der Schlüssel int
und second
der Wert pair
der Karte ist. Wenn Sie also einen Iterator it
hätten, würden Sie möchte das Minimum aller it->second.first
-Werte. Die Funktion min_element
erwartet eine Vergleichsfunktion für ihr drittes Argument. Daher müssen Sie eine Vergleichsfunktion erstellen, die second.first
ihrer zwei Argumente projiziert.
Wir beginnen mit einigen typedefs, um den Code lesbarer zu machen:
%Vor% Wir werden Boost.Lambda für seine überladenen Operatoren verwenden, damit wir operator<
verwenden können. Boost.Bind kann Member-Variablen und Member-Funktionen binden, also werden wir auch davon profitieren.
Das funktioniert auch mit boost::lambda::bind
.
bind
kann das nicht alleine machen, weil first
und second
als Felder offengelegt werden, nicht als Methoden (Sie können also nicht mit etwas wie mem_fun
davonkommen).
Das könntest du natürlich auch mit deinem eigenen Funktor machen:
%Vor%Tags und Links c++ boost-bind boost-lambda