2010-09-07 7 views
11

Hala C# öğreniyorum ve bir List<T> bir bir std::list daha olduğunu öğrenmek için şaşırdı. Birisi tüm C# koleksiyonlarını STL açısından açıklayabilir mi (ya da STL karşılaştırmaları zorsa, Wikipedia bağlantıları ile standart kavramsal veri türleri varsa? Referansın çok yararlı olacağını umuyorum.C++ STL koleksiyonları ve C# koleksiyonlarının karşılaştırması?

İlgi çekici koleksiyonların en az bir listesi şunlardır:) başkalarını eklemek için çekinmeyin:

  • Dizisi
  • Liste
  • ArrayList
  • HashTable
  • sözlük
  • ListDictionary
  • SortedDictionary
  • SortedList
  • Kuyruk
  • Stack

Düzenleme: Mapping between stl C++ and C# containers İşte

+2

.NET 1.x'i hedeflemeniz gerekmedikçe, bana sorarsanız genel olmayan türlerle uğraşmak için hiçbir neden yoktur. –

+0

LinkedList, HashSet, Lookup (genellikle ILookup arabirimi üzerinden başvurulan). Ben STL bilmiyorum, ama ben std :: liste Liste gibi değil muhtemelen daha fazla LinkedList gibi. –

+0

@Brian Rasmussen: Hangileri jenerik değil? Sadece Array? –

cevap

12

buldum budur: Sadece ilginizi çekebilecek bu benzer soru bulundu (eski olmayan koleksiyonları göz ardı ederek):

  • Array - C dizisi, .NET Dizisi 'un numaralı dizinin sıfır olmayan bir başlangıç ​​dizinine sahip olmasına rağmen. std::vector<T>
  • Dictionary<TKey, TValue> - - unordered_map<Key, Data>
  • HashSet<T> -
  • List<T>unordered_set<Key>
  • SortedDictionary<TKey, TValue> - std::map<Key, Data>
  • SortedList<TKey, TValue> - Bir std::vector<T> eşdeğerdir ancak ikili arama kullanarak sipariş tutarak + elemanları eklerken yerleştirin.
  • SortedSet<T>-std::set<Key>
  • Queue<T> - std::queue<T>
  • Stack<T>-std::stack<T>
  • LinkedList<T> - Özellikle .NET koleksiyonlarından eksik std::list<T>

, örneğin "çoklu" varyantları olan multiset, multimap Bununla birlikte, onlar çok kullanışlı çok sayıda sahte koleksiyon eklediler: "Eşzamanlı" varyantlar, örneğin, ConcurrentDictionary, ConcurrentQueue, vb

+3

, 'hash_map' ile' unordered_map' yerine, teknik olarak hala değil. standart *, TR1'de bulunur ve C++ 0x'a dahil edilir. Aynı şey "hash_set" -> unordered_set "için de geçerlidir. Bu arada, başka bir eksik varyant 'std :: deque' dir. Bildiğim kadarıyla, hiçbir .NET eşdeğeri yok. – jalf

+0

Yani 'std :: list' ve' std :: deque' için bir eşdeğer yok mu? – shinzou

+0

@kuhaku: İkili bağlantılı liste yok. Pratikte, .NET uygulamaları genellikle referans türlerini kullandığından, 'List ' (aslında bir vektör) genellikle yeterlidir. Ayrıca, çift uçlu bir sıra yoktur ve bu daha dikkat çekici bir ihmal IMO'dur. Yine, 'List 'genellikle referans türleri geçerli olduğundan OK işlevi gören bir yedek olarak kullanılır. –