Was ist der schnellste Weg herauszufinden, ob ein unordered_map
Container ein Element mit einem bestimmten Schlüssel hat?unordered_map: welcher ist schneller find() oder count()?
Antwort
Sie werden etwa gleiche Leistung haben. Sie sollten den Algorithmus verwenden, der am besten ausdrückt, was Sie zu tun versuchen.
Um dies näher auszuführen, wird im Allgemeinen count()
unter Verwendung von find()
implementiert. Zum Beispiel in libcxx wird count()
implementiert als return (find(__k) != end());
Ich denke, die Suche ist die beste Option hier, keine Notwendigkeit, weiter zu gehen.
http://www.cplusplus.com/reference/unordered_map/unordered_map/find/
find()
und count()
zu viele Behälter in C++ anwendbar sind.
Für Maps, Sets usw. wird find immer eine konstante Ausführungszeit haben, da es nur den Hash berechnet und einen Iterator an das erste gefundene Element zurückgibt (end()
falls nicht gefunden).
count()
auf der anderen Seite hat eine konstante Ausführungszeit O (e), wobei e die Anzahl der Male ist, die der angegebene Schlüssel gefunden wird. Der schlimmste Fall ist eine Sammlung, in der alle Mitglieder die gleichen sind, so count
eine Komplexität O (n)
map
oder unordered_map
erlauben keine Duplikate, damit ihre asymptotische Laufzeit wäre das gleiche, haben könnte.
Die Auswahl hängt von der Semantik in Ihrem Code ab. Wenn Sie nur überprüfen möchten, ob ein Schlüssel vorhanden ist, können Sie einfach count
verwenden. Wenn Sie überprüfen möchten, ob ein Schlüssel vorhanden ist, und dessen Wert verwenden, gehen Sie zu find
, da Sie bereits einen Iterator haben, der auf dieses Element zeigt.
- 1. Systemaufruf oder dlsym? Welcher Weg ist schneller?
- 2. Warum ist unordered_map "find + insert" schneller als "insert + check for success"?
- 3. numpy.max oder max? Welcher ist schneller?
- 4. Welcher Boolean ist schneller? <oder <=
- 5. Ist COUNT (Feld) schneller als COUNT (*)?
- 6. ist count (indizierte Spalte) schneller als count (*)?
- 7. DrawDib StretchDIBits welcher ist schneller?
- 8. Qt Creator mit MinGW oder Visual Studio - Welcher ist "schneller"?
- 9. welcher ist schneller/besser strcasecmp() oder gleich Operator?
- 10. Welcher spärliche lineare Löser ist schneller? SparseLU oder BiCGSTAB?
- 11. Welcher dieser Selektoren ist wahrscheinlich schneller?
- 12. welcher wird schneller sein?
- 13. Welcher ist schnell, abstrakte Klasse oder Schnittstelle?
- 14. Welche ist schneller, equalsIgnoreCase oder compareToIgnoreCase
- 15. Welche ist schneller: korrelierte Unterabfragen oder Join?
- 16. Ist der Linq Count() schneller oder langsamer als List.Count oder Array.Length?
- 17. jQuery was ist schneller: Selektoren oder Methoden?
- 18. Ist HttpWebRequest oder Webclient schneller
- 19. Mongodb was ist schneller $ in oder $ oder?
- 20. Warum ist Select 1 schneller als Select count (*)?
- 21. boost :: unordered_map ist ... geordnet?
- 22. Links JOIN schneller oder Inner Join schneller?
- 23. Welcher Codierungsstil ist häufiger?
- 24. Ist die unordered_map wirklich ungeordnet?
- 25. Löschen eines Vektors oder Definieren eines neuen Vektors, welcher ist schneller
- 26. Welcher Artikel ist schneller in einer Hashtabelle oder in einer sortierten Liste zu finden?
- 27. Was ist schneller?
- 28. Was ist schneller: SqlCommand.Parameters [Zeichenfolge] oder .Parameters [Int]?
- 29. Was ist schneller? System.currentTimeMillis() oder Date(). GetTime()?
- 30. Was ist schneller DOM Insertion oder Manipulation?
'unordered_map' weiß, dass es eindeutige Schlüssel hat, also' count() 'stoppt bei der ersten Übereinstimmung (es sei denn, die Implementierung ist kaputt, aber Sie sollten davon ausgehen, dass es nicht ist) –