Überprüfung auf Existenz in std :: map - count vs find
So scheint es zwei allgemein akzeptablen Methoden der Bestimmung, ob ein Schlüssel vorhanden ist in einer std::map:
map.find(key) != map.end()
map.count(key) > 0
Ist eine effizienter als die andere? Insbesondere das Konzept der count() könnte dahingehend interpretiert, dass die Methode iteriert über alle Schlüssel, die Auszählung insgesamt Anzahl (und aufgrund der definition von std::map, dass total count immer 0 oder 1). Ist count () - garantiert auf "stop", nachdem eine übereinstimmung, die auf der gleichen Komplexität wie ein find()?
InformationsquelleAutor der Frage dolphy | 2014-08-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da eine Karte nur maximal einen Schlüssel
count
im wesentlichen zu stoppen, nachdem ein element gefunden wurde. Jedoch, im Hinblick auf die Allgemeinen Behälter, wie multimaps und multimengen,find
ist strikt besser, wenn Sie nur die Sorge, ob einige element mit diesem Schlüssel existiert, da kann es wirklich beenden, sobald das erste passende element gefunden wurde.Im Allgemeinen, sowohl
count
undfind
verwenden der container-spezifischen lookup-Methoden (tree traversal) oder hash-Tabelle-lookup), die sind immer ziemlich effizient. Es ist nur so, dasscount
weiter Durchlaufen, bis das Ende des equal-range, in der Erwägung, dassfind
nicht. Außerdem sollte Ihr code Dokuments, so dass, wenn Sie etwas finden wollen, verwenden Siefind
.InformationsquelleAutor der Antwort Kerrek SB
Entsprechend den source-code, schlage ich
find
. Finden Sie die Quelle code.In GCC, die code ist folgender (
stl_map.h
):In Visual Studio auf der windows-Plattform, die code sind folgende (
xtree
):InformationsquelleAutor der Antwort Bright Chen
Wenn Sie nur wollen, um herauszufinden, ob der Schlüssel vorhanden ist oder nicht, und kümmern sich nicht um den Wert, es ist besser, verwenden Sie
map::count
da gibt es nur eine ganze Zahl.map::find
gibt einen iterator, so indemcount
speichern Sie den Bau von einem iterator.InformationsquelleAutor der Antwort Sagar Jha