7
votes

C ++ vs vs vs

Je cherche actuellement une meilleure alternative à STD :: Carte et rencontrez des cours mentionnés dans le titre Post. Quelqu'un pourrait-il clarifier les différences entre eux, pas en termes de performance / API, mais en ce qui concerne l'endroit où ils se rapportent par rapport à la norme actuelle et fadecomnig.


0 commentaires

3 Réponses :


2
votes

Les en-têtes de Sont des choses spécifiées dans TR1 'Draft'. Je crois que beaucoup d'entre eux sont susceptibles de progresser dans C ++ 0X (bien que cela ne soit pas garanti et qu'il soit également possible de modifier incompatible). est des extensions non standard (c'est-à-dire spécifiques au fournisseur) comme je le comprends. Boost fournit également un Unommanded_map qui peut être pratique Si vous essayez de cibler les compilateurs qui ne fournissent aucun des en-têtes que vous avez mentionnés.


0 commentaires

13
votes
  • std :: map: le conteneur associatif standard actuel C ++ (clé / valeur), qui fonctionne comme un arbre derrière;
  • std :: Unordered_map: la norme suivante (C ++ 0x - ou dans le rapport technique 1) Conteneur de carte de hachage, qui fonctionne comme une ... Carte de hachage.
  • STD :: TR1 :: Unommked_map: identique à celui du précédent mais dans l'espace de noms TR1, souvent trouvé dans les compilateurs souhaitant fournir des extensions TR1, mais dans un autre espace de noms que STD.
  • ext :: Unorded_map: toujours la même idée, mais une implémentation spécifique au compilateur, il n'est donc pas garanti d'être exactement identique à STD :: Unommanded_map, à l'interface et à la mise en œuvre.

    Si vous le pouvez, utilisez STD :: Unorded_map car il s'agit du nom final de la mise en œuvre de la carte de hachage (si vous avez besoin d'une carte de hachage). Les autres noms sont là au cas où votre compilateur leur fournit, mais dans un espace de noms séparé (comme C ++ 0x n'est pas encore disponible officiellement).

    Il y a boost :: Unommanded_map aussi au fait, mais c'est presque la même idée et interface.


6 commentaires

Si proche. L'ext :: Unorded_map pourrait être n'importe quoi et est totalement indépendant pour le STD. Il peut ne pas être la même interface, qui serait très important pour toute personne intéressée à maintenir le code client prêt pour la nouvelle norme au lieu de vous adapter à une mise en œuvre particulière. En outre, l'espace de noms TR1 est l'endroit où ONUORDED_MAP existe dans TR1, pas StD :: Espace de noms. Certaines des choses de TR1 sont différentes de celles qui finiront par être libérées dans le STD. Depuis que le STD n'existe pas encore, il est difficile de dire ce que le STD :: Unommanded_map est en fait par rapport à cette STD, s'il y a une diff.


Ceci sera utilisé dans une bibliothèque de sorte quelle (s) macro (s) servirait à se protéger de l'utilisation de STD :: Unorded_map d'être incorrectement incluse où STD :: La carte doit être utilisée?


Quels compilateurs qui ont publié de nouvelles choses dans la STD :: Les espaces de noms ont fait, c'est essayer d'anticiper ce que ces nouvelles choses ressembleront. D'une certaine manière, ils se trompèrent, dans d'autres, ils auront raison. Les chances de non-ordonné étant changées ne sont pas grandes mais d'autres choses déjà ont depuis, par exemple, MSVC a été publiée.


@user - Il n'y a aucune chance de mélanger la carte et le non-ordonné_map. Ils sont totalement différents, dans différents en-têtes, etc ... vous devrez essayer de les confondre vraiment.


Noah Roberts> Je n'ai pas fait clairement, mais c'est ce que je voulais dire pour ext :: Unorded_map. Je modifierai l'explication.


@Noah: désolé, j'ai oublié a été trié !!



0
votes

Si vous parlez de l'EXT / ONUORKED_MAP, il s'agit de l'ancien composant SGI / HP STL. Il est très similaire à l'autre ONUPERED_MAPS. J'utiliserais std :: Unommanded_map comme composant standard - c'est l'avenir.

Je comprends que les anciens conteneurs de hachage SGI / HP ont à peine manqué d'être inclus dans la norme C ++ 98 pour une raison quelconque.


0 commentaires