Suche nach einem bestimmten Wert in std :: map [duplicate]

8
  

Mögliche Duplikate:
Wert wird überprüft existieren in einer std :: map - C ++
Wie durchquert man eine STL Map / Vektor / Liste / etc?

Hallo,

Ist es möglich, in std :: map nach einem bestimmten Wert zu suchen, ohne den Schlüssel zu kennen? Ich weiß, ich könnte über die gesamte Karte iterieren und Werte vergleichen, aber es ist möglich, eine Funktion von Std-Algorithmen zu verwenden?

    
BЈовић 06.12.2010, 15:23
quelle

4 Antworten

4

Wird das helfen? STL find_if

Sie müssen eine Art Prädikat haben, entweder einen Funktionszeiger oder ein Objekt mit operator() implementiert. Dieses Prädikat sollte nur einen Parameter haben.

    
Platinum Azure 06.12.2010, 15:30
quelle
12

Nun, Sie könnten std::find_if verwenden:

%Vor%

Aber das ist nur etwas besser als eine handgefertigte Schleife: es ist immer O(n) .

    
icecrime 06.12.2010 15:29
quelle
8

Sie können Boost.Bimap verwenden, wenn Sie möchten um Werte und Schlüssel zu indexieren. Ohne dies oder Ähnliches muss dies mit roher Gewalt gemacht werden (= & gt; scannen Sie map von Hand).

  

Boost.Bimap ist eine bidirektionale Karte   Bibliothek für C ++. Mit Boost.Bimap Sie   kann assoziative Container in erstellen   welche beide Typen als Schlüssel verwendet werden können.

    
Steve Townsend 06.12.2010 15:27
quelle
2

Es gibt (peinliche) Möglichkeiten, dies mit Standardfunktionen zu tun (zB std::find_if ) , aber diese beinhalten immer noch das Iterieren über die ganze Karte. Boost.Bimap bietet eine effiziente Indexierung in beide Richtungen und Sie können sogar noch weiter gehen mit Boost.Multi-Index .

    
Marcelo Cantos 06.12.2010 15:27
quelle

Tags und Links