2010-07-22 5 views
1

Savez-vous s'il y a une différence de performance quand j'accède à un élément std::map en utilisant find ou operator []?accès rapide à l'élément de std :: map

L'un renvoie iterator et l'autre const ref à l'objet.

Lequel pourrait être plus rapide en raison de tous les derrière la scène de la STL?

Répondre

5

Lorsque vous utilisez [] sur une clé qui n'existe pas, l'élément par défaut sera inséré. Cet élément par défaut dépend de la définition de votre carte (par exemple, pour un entier, ce sera un zéro). Lorsque vous utilisez find, il n'y a pas d'insertion "automatique", ce qui peut être plus rapide si vous recherchez souvent des clés qui n'existent pas.

+0

J'ajouterais que l'opérateur [] appelle essentiellement find. Si l'élément n'existe pas, il utilise la position où l'élément aurait dû être pour l'ajouter. Cela "juste" coûte la construction d'éléments. – Scharron

+1

Bon point. Juste comparer la vitesse entre deux choses qui ne font pas la même chose tend à être trompeuse. –

-3

find() est O (n). operator [] est O (1). Par conséquent, ce dernier est (généralement) plus rapide.

+0

Cela dépend de l'implémentation de votre carte. Les prérequis pour std :: map sont O (log (n)) pour find (et operator [] utilise plus ou moins find). – Scharron

+0

Vous devez être confondu entre les hashmaps et les cartes. –

Questions connexes