Der einzige Weg, den ich gefunden habe, um nach Duplikaten zu suchen, ist durch Einfügen und Überprüfen der std::pair.second
für false
, aber das Problem ist, dass dies noch etwas einfügt, wenn der Schlüssel nicht verwendet wird, was ich will ist eine map.contains(key);
Funktion.Wie überprüft man, ob std :: map einen Schlüssel enthält, ohne Einfügen?
Antwort
Verwenden Sie my_map.count(key)
; Es kann nur 0 oder 1 zurückgeben, was im Wesentlichen das gewünschte boolesche Ergebnis ist.
Alternativ my_map.find(key) != my_map.end()
funktioniert auch.
-1: Sollte 'find' verwenden. Es ist mindestens so effizient wie "count" für Karten und Multimaps und effizienter, wenn Sie die typische Notwendigkeit betrachten, Änderungen an den gefundenen Schlüsseln vorzunehmen. –
@John: Das riecht nach vorzeitiger Optimierung. Auf GCC (und ich bin mir sicher, die meisten vernünftigen Systeme), wird 'map :: count' als' find (__ x) == end()? 0: 1; '. Für "multimap" haben Sie vielleicht ein Performance-Argument, aber das ist nicht die Frage von OP und ich bevorzuge immer noch Eleganz. – Potatoswatter
Nein, das vorzeitige Optimierungsargument ist nur gültig, wenn die Optimierung etwas Aufwand erfordert, was in diesem Fall nicht der Fall ist. – markh44
Potatoswatter's Antwort ist in Ordnung, aber ich bevorzuge stattdessen find
oder lower_bound
. lower_bound
ist besonders nützlich, da der zurückgegebene Iterator anschließend für eine angedeutete Einfügung verwendet werden kann, wenn Sie etwas mit demselben Schlüssel einfügen möchten.
map<K, V>::iterator iter(my_map.lower_bound(key));
if (iter == my_map.end() || key < iter->first) { // not found
// ...
my_map.insert(iter, make_pair(key, value)); // hinted insertion
} else {
// ... use iter->second here
}
Dies ist subtil anders als, wie er sagt er macht es ... der einzige Unterschied ist, dass die Berechnung von "Wert" übersprungen werden kann, wenn das Einfügen nicht notwendig ist. – Potatoswatter
Sicher, ich verstehe, dass das OP nicht gerne einfügen, so dass eine 'Lower_bound'-basierte Lösung übertrieben ist. Ich habe gerade meine Antwort "aus Gründen der Vollständigkeit" erwähnt; Wie ich schon sagte, deins ist vollkommen ausreichend. :-) –
Ja, das ist eine gute Antwort und ich stimme überhaupt nicht zu. Nur die Beziehung zu der Alternative von "einfügen" a priori. Tatsächlich gibt es einen weiteren Unterschied, wenn eine "Multimap" verwendet wird, die "lower_bound" -Methode am Anfang des äquivalenten Bereichs eingefügt wird, während die einfache "insert" -Methode am Ende des Bereichs hinzugefügt wird. – Potatoswatter
- 1. einen Schlüssel hinzufügen std :: map ohne Wert
- 2. Wie überprüft man, ob Schlüssel oder Wert in Map existieren?
- 3. Wie überprüft man, ob Schlüssel in SwiftyJSON vorhanden ist, wenn JSON Array ohne Schlüssel enthält
- 4. Wie überprüft man, ob ein Objekt einen Wert enthält?
- 5. Wie kann man einen gültigen Schlüssel hinzufügen, ohne einen Wert für eine std :: map anzugeben?
- 6. Wie überprüft man, ob CKEditor etwas Text enthält?
- 7. , wie ich einfügen in std :: map effizienter
- 8. Wie bekomme ich einen std :: Schlüsselsatz zu einer std :: map?
- 9. Wie überprüft man, ob eine Zeichenfolge eine bestimmte Teilzeichenfolge enthält?
- 10. Wie überprüft man, ob eine Zeichenfolge zwei Sternchen enthält?
- 11. Wie überprüft man, ob ein Lesezeichen eine Tabelle enthält?
- 12. Wie überprüft man, ob Zeichenfolge enthält Zeichenfolge in Pascal
- 13. Wie überprüft man, ob ein String ein int enthält? -Swift
- 14. Wie überprüft man, ob ein TextView eine bestimmte Zeichenfolge enthält
- 15. C++ std :: map oder std :: set - effizient Duplikate einfügen
- 16. Wie überprüft man, ob Hash-Schlüssel JSON in Perl enthalten?
- 17. Wie überprüft man, ob text1 text2 mit vb6 enthält?
- 18. Wie überprüft man, ob die Übergabeschaltfläche die richtige Antwort enthält
- 19. Wie überprüft man, ob eine Zeichenfolge einige Zeichenfolgen enthält
- 20. Numpy: Wie überprüft man, ob das Array bestimmte Nummern enthält?
- 21. Wie überprüft man, ob eine Zeichenfolge http: // am Anfang enthält
- 22. Wie überprüft man, ob ein String ein bestimmtes Zeichen enthält?
- 23. Wie überprüft man, ob Text nur Zahlen enthält?
- 24. Ruby: Wie überprüft man, ob eine Zeichenfolge mehrere Elemente enthält?
- 25. Wie überprüft man, ob ein Element ein spezifisches Klassenattribut enthält
- 26. Wie überprüft man, ob das Eingabe-Textfeld nur Leerzeichen enthält?
- 27. Wie überprüft man, ob der String-Inhalt HTML enthält?
- 28. Winkelmesser - wie überprüft man, ob ein Element Text enthält
- 29. Wie überprüft man, ob eine statische Bibliothek Bitcode enthält?
- 30. Javascript - Wie überprüft man, ob eine Zeichenfolge mehrere Teilzeichenfolgen enthält
möglich Duplikat [Wie wenn ein bestimmte Schlüssel existiert in einer C++ std :: map finden] (http://stackoverflow.com/questions/1939953/how-to-find-if-a-given -key-exists-in-ac-stdmap) – OrangeDog