Ich möchte std :: find_if verwenden, um nach dem ersten Element in meiner Map zu suchen, das in einem bestimmten Element seiner Wertestruktur einen bestimmten Wert hat. Ich bin ein wenig verwirrt. Ich denke, ich muss bind1st oder bind2nd verwenden, aber ich bin nicht sicher, dass das der richtige Weg ist.
Hier ist ein Pseudocode:
%Vor%Nehmen wir an, ich wollte das erste Element der Map finden, in dem das .x-Element des ValueType einem bestimmten ganzzahligen Wert entspricht (der jeden Aufruf ändern kann).
Was wäre der beste Weg, um eine Funktion oder ein Funktionsobjekt zu schreiben, um dies zu erreichen? Ich verstehe, dass das ein unäres Prädikat sein muss, das mich denken lässt, dass ich bind1st oder bind2nd brauche, um den ganzzahligen Wert zu liefern, nach dem ich suche, aber ich bin mir nicht sicher, wie ich das machen soll. Es ist viel zu lange her, dass ich mir dieses Zeug angesehen habe! & gt;. & lt;
Elemente in der Map sind nicht nach Wert sortiert, sie sind nach dem Schlüssel sortiert. Der Satz "das erste Element" hat also wenig Sinn.
Um einige -Elemente (nicht die ersten) zu finden, deren x
einem Wert entspricht, können Sie den Funktor wie folgt schreiben:
Dann benutze es wie folgt:
%Vor%Sie können eine Lambda-Funktion verwenden
%Vor%Aber wie Kirill V. Lyadvinsky antwortet, könnte das "erste" Element nicht das sein, was Sie erwarten.
Wenn Sie auch in Werten suchen möchten, dann verwenden Sie besser Boost Bimap , um nicht zu langsam zu sein?
Dies hat nichts mit std::bind1st
oder std::bind2nd
zu tun. Zuallererst müssen Sie bedenken, dass die Elemente einer Karte Schlüssel / Wert-Paare sind, in Ihrem Fall std::pair<int,ValueType>
. Dann brauchen Sie nur ein Prädikat, das das x-Mitglied des zweiten Mitglieds eines Paares mit einem bestimmten Wert vergleicht: