Un récent discours sur unordered_map
en C++ m'a fait réaliser que je devrais utiliser unordered_map
pour la plupart des cas où j'ai utilisé map
auparavant, en raison de l'efficacité de la recherche ( amortis O(1) vs. O(log n) ). La plupart du temps, j'utilise une carte, soit int
o std::string
comme type de clé ; par conséquent, je n'ai aucun problème avec la définition de la fonction de hachage. Plus j'y pensais, plus je me rendais compte que je ne voyais aucune raison d'utiliser un type de clé std::map
sur un std::unordered_map
dans le cas des clés avec des types simples -- J'ai jeté un coup d'oeil aux interfaces, et je n'ai pas trouvé de différences significatives qui auraient un impact sur mon code.
D'où la question : y a-t-il une réelle raison d'utiliser std::map
en std::unordered_map
dans le cas de types simples comme int
y std::string
?
Je pose la question d'un point de vue strictement programmatique - je sais que ce n'est pas entièrement considéré comme un standard et que cela peut poser des problèmes de portage.
Aussi, je m'attends à ce que l'une des réponses correctes soit "c'est plus efficace pour les petits ensembles de données" en raison d'une charge moins importante (est-ce vrai ?) -- c'est pourquoi j'aimerais restreindre la question aux cas où le nombre de clés est non trivial (>1 024).
Edit : duh, j'ai oublié l'évidence (merci GMan !) -- oui, les cartes sont commandées bien sûr -- je le sais, et je cherche d'autres raisons.
33 votes
J'aime poser cette question lors des entretiens : "Quand le tri rapide est-il meilleur que le tri à bulles ?" La réponse à cette question donne un aperçu de l'application pratique de la théorie de la complexité et non de simples affirmations en noir et blanc telles que O(1) est meilleur que O(n) ou O(k) est équivalent à O(logn) etc.....
61 votes
@Beh, je pense que tu voulais dire "quand est-ce que le tri à bulles est meilleur que le tri rapide" :P
3 votes
Un pointeur intelligent serait-il une clé triviale ?
0 votes
Voici l'un des cas dans lesquels la carte est la plus avantageuse : stackoverflow.com/questions/51964419/
4 votes
@Matthieu N. A votre place, en utilisant ce genre de question qui ne sera presque jamais utile et qui embarrasse inutilement beaucoup de candidats, je préfère être embarrassé :/.