2010-09-07 16 views
11

J'apprends encore C# et j'ai été surpris de découvrir qu'un List<T> ressemble beaucoup plus à un std::vector qu'à un std::list. Est-ce que quelqu'un peut décrire toutes les collections C# en termes de STL (ou si les comparaisons STL sont difficiles, types de données conceptuelles standard avec des liens Wikipedia?) Je pense que la référence serait largement utile. ne hésitez pas à ajouter d'autres):Comparaison des collections STL C++ et des collections C#?

  • tableau
  • Liste
  • ArrayList
  • Hashtable
  • Dictionnaire
  • ListDictionary
  • SortedDictionary
  • SortedList
  • Queue
  • Stack

Edit: Je viens de découvrir cette même question qui peut intéresser: Mapping between stl C++ and C# containers

+2

Sauf si vous avez besoin de cibler .NET 1.x, il n'y a vraiment aucune raison de vous préoccuper des types non génériques si vous me le demandez. –

+0

LinkedList, HashSet, Lookup (généralement référencé via l'interface ILookup). Je ne sais pas STL, mais je std :: liste n'est pas comme Liste c'est probablement plus comme LinkedList . –

+0

@Brian Rasmussen: Quels sont les non-génériques? Juste le tableau? –

Répondre

12

Voici ce que j'ai trouvé (en ignorant les anciennes collections non génériques):

  • Array - Tableau C, bien que le tableau .NET puisse avoir un index de départ différent de zéro.
  • List<T>-std::vector<T>
  • Dictionary<TKey, TValue>-unordered_map<Key, Data>
  • HashSet<T> - unordered_set<Key>
  • SortedDictionary<TKey, TValue> - std::map<Key, Data>
  • SortedList<TKey, TValue> - équivalent à un std::vector<T> mais garder ordonnée à l'aide recherche binaire + insérer lors de l'ajout d'éléments.
  • SortedSet<T>-std::set<Key>
  • Queue<T> - std::queue<T>
  • Stack<T>-std::stack<T>
  • LinkedList<T> - std::list<T>

manquant notamment des collections .NET sont les variantes "multi", par exemple, multiset, multimap Cependant, ils ont ajouté un certain nombre de collections threadsafe très utiles: les variantes "Concurrent-", par exemple, ConcurrentDictionary, ConcurrentQueue, etc.

+3

vous pourriez vouloir remplacer 'hash_map' par' unordered_map', ce qui, techniquement toujours pas * standard *, est inclus dans TR1 et sera inclus dans C++ 0x. La même chose est vraie pour 'hash_set'->' unordered_set'. Soit dit en passant, une autre variante manquante est 'std :: deque'. Pour autant que je sache, il n'y a pas d'équivalent .NET. – jalf

+0

Donc, il n'y a pas d'équivalent à 'std :: list' et' std :: deque'? – shinzou

+0

@kuhaku: Il n'y a pas de liste à double liaison. En pratique, puisque les applications .NET utilisent généralement des types de référence, la liste (en fait un vecteur) est généralement suffisante. Il n'y a pas non plus de file d'attente à double fin, et c'est une omission IMO plus visible. Encore une fois, 'List ' est généralement utilisé comme un remplacement, ce qui fonctionne bien puisque les types de référence prévalent. –