0
votes

Quel est l'avantage d'utiliser std :: type_info :: hash_code sur STD :: type_index

est la seule différence que l'on peut utiliser comme index?

Quel est l'avantage d'utiliser un sur l'autre pour comparer les types?


0 commentaires

3 Réponses :


0
votes

de CPPreference :

L'expression typeid est une expression lvalue qui fait référence à un objet avec durée de stockage statique, du type polymorphique const std STD :: type_info ou d'un type de type dérivé.

La classe type_index est une classe wrapper autour d'un objet STD :: type_info, qui peut être utilisé comme index dans des conteneurs associatifs associatifs et non ordonnés. La relation avec Type_info objet est maintenue via un pointeur, donc type_index est CopyConstructible et CopyAssignable . .


1 commentaires

Merci d'avoir lu ceci, j'espérais plus d'informations sur les cas d'utilisation spécifiques au-delà de choisir STD :: type_index lors de l'indexation. À cet égard, ils semblent actuellement quelque peu interchangeables.



0
votes

std :: type_info :: hash_code () est une fonction de membre qui renvoie un std ::ze_t . C'est juste un numéro, vous ne pouvez pas obtenir le nom du std :: type_info de celui-ci.

std :: type_index est un type compatible avec des conteneurs, qui dispose également d'un membre nom , en faisant référence à la std :: type_info que cela indexe.


0 commentaires

0
votes

Comme avec tout hachage, les collisions sont possibles :

retourne une valeur non spécifiée telle que pour tous les objets type_info se référant au même type, leur hash_code () est identique.

Aucune autre garantie n'est donnée: type_info Les objets faisant référence à différents types peuvent avoir le même hash_code (bien que la norme recommande que les implémentations évitent cela autant que possible) et hash_code pour le même type peut changer entre les invocations du même programme.

( ref ) < / p>

(cette dernière phrase est particulièrement intéressante.)

Laquelle des deux fonctions que vous souhaitez utiliser dépend de ce que vous essayez de faire. Généralement, type_index () est ce que vous cherchez. Il identifie de manière unique un type. Si vous souhaitez une clé pour un conteneur associatif, type_index () 'S hasher efficacement est hash_code () . .

Je ne peux pas penser à une raison pour laquelle vous auriez besoin d'utiliser hash_code () vous sauf si vous êtes pour une raison quelconque d'essayer d'éviter type_index () (Ou vous trouvez que vous devez spécifier le hasher vous-même), bien que l'article lié ait un exemple d'une telle mise en œuvre.


0 commentaires