2010-09-07 14 views
11

Wciąż uczę się C# i byłem zaskoczony, gdy dowiedziałem się, że List<T> jest bardziej podobny do std::vector niż std::list. Czy ktoś może opisać wszystkie kolekcje C# w kategoriach STL (lub jeśli porównania STL są trudne, standardowe typy danych koncepcyjnych z linkami Wikipedii? Spodziewam się, że odwołanie będzie powszechnie przydatne. krępuj się dodać inne):Porównanie kolekcji C++ STL i kolekcji C#?

  • Array
  • Lista
  • ArrayList
  • HashTable
  • słownik
  • ListDictionary
  • SortedDictionary
  • SortedList
  • Kolejka
  • Stos

Edit: Właśnie znalazłem to podobne pytanie, które mogą być interesujące: Mapping between stl C++ and C# containers

+2

Jeśli nie chcesz kierować reklamy na platformę .NET 1.x, nie musisz się martwić typami nietypowymi, jeśli mnie o to poprosisz. –

+0

LinkedList, HashSet, Lookup (zwykle określane poprzez interfejs ILookup). Nie wiem, STL, ale i std :: list nie jest jak List jest prawdopodobnie bardziej jak LinkedList . –

+0

@Brian Rasmussen: Które z nich są nietypowe? Tylko Array? –

Odpowiedz

12

Oto co znalazłem (ignorując stare kolekcje nie generyczne):

  • Array - Tablica C, choć tablica .NET może mieć mieć niezerowy indeks początkowy.
  • 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> - odpowiednik std::vector<T> ale utrzymanie go zamawiać za pomocą wyszukiwania binarnego + wstawić podczas dodawania elementów.
  • SortedSet<T> - std::set<Key>
  • Queue<T> - std::queue<T>
  • Stack<T> - std::stack<T>
  • LinkedList<T> - std::list<T>

szczególności brakuje ze zbiorów .NET są "multi-" warianty, np multiset, multimap itp. Dodali jednak szereg bardzo przydatnych kolekcji wątków: warianty "Współbieżne-", np. ConcurrentDictionary, ConcurrentQueue, itp.

+3

możesz chcieć zastąpić 'hash_map' z' unordered_map', która, choć technicznie jeszcze nie jest * standard *, jest zawarty w TR1 i będzie zawarty w C++ 0x. To samo nas dotyczy 'hash_set'->' unordered_set'. Nawiasem mówiąc, innym brakującym wariantem jest 'std :: deque'. O ile wiem, nie ma odpowiednika .NET. – jalf

+0

Więc nie ma odpowiednika 'std :: list' i' std :: deque'? – shinzou

+0

@kuhaku: Nie ma podwójnie powiązanych list. W praktyce, ponieważ aplikacje .NET zazwyczaj używają typów referencyjnych, zwykle wystarcza "Lista " (właściwie wektor). Nie ma również kolejki podwójnie zakończonej, a to jest bardziej zauważalne pominięcie IMO. Ponownie, 'List ' jest zwykle używany jako zamiennik, który działa OK, ponieważ dominują typy odniesienia. –

Powiązane problemy