Qual è il modo più veloce per capire se un container-ha un elemento con una chiave specificata?unordered_map: quale è più veloce find() o count()?
risposta
Avranno circa pari prestazioni. Dovresti usare l'algoritmo che meglio esprime ciò che stai cercando di fare.
Per elaborare quello, in genereverrà implementato utilizzando find()
. Ad esempio, in libcxx, count()
viene implementato come return (find(__k) != end());
Penso che il Trova sia l'opzione migliore qui, non c'è bisogno di andare oltre.
http://www.cplusplus.com/reference/unordered_map/unordered_map/find/
find()
e count()
sono applicabili a molti contenitori in C++.
Per mappe, set, ecc., Find avrà sempre un tempo di esecuzione costante, poiché calcola semplicemente l'hash e restituisce un iteratore al primo elemento trovato (end()
se non trovato).
count()
d'altra parte, ha un tempo di esecuzione costante O (e), dove e è il numero di volte che viene trovata la chiave fornita. Il caso peggiore è una raccolta dove tutti i membri sono uguali, così count
potrebbe avere un O complessità (n)
map
o unordered_map
non consentono di duplicati, quindi il loro tempo di esecuzione asintotico sarebbe la stessa.
La scelta dipende dalla semantica del codice. Se vuoi solo verificare se esiste una chiave, puoi semplicemente usare count
. Se desideri verificare se esiste una chiave e utilizzarne il valore, vai su find
poiché hai già un iteratore che punta a quell'elemento.
- 1. Quale è più veloce - INSTR o LIKE?
- 2. Quale è più veloce, XPath o Regexp?
- 3. Quale è più veloce? Confronto o assegnazione?
- 4. Quale è più veloce, "trova -exec" o "trova | xargs -0 '?
- 5. "SELECT COUNT (column)" più veloce/più lento di "SELECT COUNT (*)"?
- 6. Cosa è più veloce $ ("s1"). Find ("s2"). Find ("s3") o $ ("s1 s2 s3")?
- 7. Quale è più veloce asp.net mvc json o json.net?
- 8. Quale costrutto "se" è più veloce - istruzione o operatore ternario?
- 9. Quale è il protocollo più veloce, ssh o git?
- 10. SQLite Android: quale query ("query" o "rawQuery") è più veloce?
- 11. Quale è più veloce? Costanti, variabili o array di variabili
- 12. Quale è più veloce, Clojure o ClojureScript (e perché)?
- 13. Quale è più veloce e perché?
- 14. SQL e PHP - Qual è il più veloce mysql_num_rows() o 'select count()'?
- 15. numpy.max o max? Qual è più veloce?
- 16. È HttpWebRequest o Webclient più veloce
- 17. Differenza tra count() e find(). Count() in MongoDB
- 18. che è più veloce, equalsIgnoreCase o compareToIgnoreCase
- 19. Tra Trova, Singolo, Primo, quale è il più veloce?
- 20. Cache o registri - che è più veloce?
- 21. Chi è più veloce: PEG o GLR?
- 22. Perché la mappa dovrebbe essere molto più veloce di unordered_map?
- 23. Quale inserimento più veloce, campo XML o campo Varchar (max)?
- 24. Quale funzione cresce più veloce, esponenziale o fattoriale?
- 25. Quale operatore è più veloce (> o> =), (<o <=)?
- 26. doppio o mobile, che è più veloce?
- 27. che è più veloce? Dichiarazione o PreparedStatement
- 28. write o printf, che è più veloce?
- 29. Quale query SQL è più veloce? Filtro sui criteri di partecipazione o clausola Where?
- 30. Confronto Regex vs. Manuale. Quale è più veloce?
'unordered_map' sa che ha chiavi univoche, quindi' count() 'si fermerà alla prima corrispondenza (a meno che l'implementazione non sia interrotta, ma dovresti assumere che non lo sia) –