2012-06-16 27 views
7

Veri yapıları üzerinde çalışıyorum ve STL konteynırlarının eşdeğerlerini sormak istiyorum. örneğinSTL konteynerlerinin veri yapıları eşdeğerleri

  • vektör = dinamik dizi
  • sıra = sıra
  • yığın =
  • priority_queue = yığın
  • listesi = bağlantılı liste
  • grubu = ağaç
  • yığını slist = tek bağlantılı liste
  • bit_vector = vektör bool
  • harita = çift
  • deque =?
  • multiset =?
  • multimap =?
  • hash_set =?
  • hash_map =?
  • hash_multiset =?
  • hash_multimap =?
  • hash =?
  • bit_set =?
+0

deque = Çift bitiş kuyruğu. Çoğu öğeyi de itebileceğiniz bir vektöre benziyor. multi_set = Çoklu değerler (benzersiz değerlere sahip değildir); multi_map = Bir anahtar ilişkili birden fazla değere sahip olabilir. map! = çift ama haritanın konteyner öğeleri çift. – Mahesh

+0

'std :: hash' bir kap değil, bir functor. –

+0

Steve: Bir functor dediğinde daha spesifik olabilir misin? –

cevap

6

C++ standart kitaplık kapsayıcılarını düzenleyen standart, uygulamanın kendisi hakkında çok fazla şey söylememeye çalışır. Ancak, ekleme, çıkarma, arama, aralık ekleme vb. Karmaşıklığı konusundaki çok spesifik kısıtlamalar, çoğu uygulamanın kaplar için aynı tip veri yapılarını kullandığı anlamına gelir.

  • std :: listesi:: iki kat bağlantılı liste
  • std :: seti, std :: MULTISET, std :: map, std :: Multimap: kendini dengeleyen ikili senin örneklerden bazıları Dair ağaçlar, genellikle kırmızı-siyahtır.
  • hash_ *: C++ 11, unordered_set, unordered_map ve çoklu kardeşleri sağlar. Bunlar karma masalar.
  • bitset: sabit boyutlu dizi

I STL bu uygulamaları aşağıdaki inanıyoruz.

1

seti ve multiset- ikili arama ağacı

harita ve Multimap - ikili arama ağacı

deque -

hash* konteynerler deque karma tablo olarak uygulanan ilişkisel kapları Karma yapılmadan. örn. hash_map, hash tablosunu kullanarak bakılan pair<key,value> içerir. bit kümesi

the individual elements are accessed as special references which mimic bool elements

2

Ben sadece bir "çift" olarak std :: haritayı <> eleme sanmıyorum içinde

doğru olacaktır. Aslında, sadece bir çift olan bir yardımcı programı std :: çifti <> var. std :: map <>, benzersiz anahtarlar ve benzersiz olmayan değerleri, bir dizinin, dizinin sayısal olabileceği türden olmayan bir dizinin benzeri bir sözdizimini kullanmasını mümkün kılacak şekilde depolar.

Düzenleme: juanchopanza aracılığıyla "yardımcı" için "kapsayıcı" düzeltildi.

+0

evet yanılıyor olabilir – demosthenes

+0

Pedantic note: std :: pair bir kapsayıcı olarak değil, bir "yardımcı program" olarak kabul edilir. – juanchopanza

0
vector = dynamic array 

queue = queue 

stack = stack 

priority_queue = priority queue based on binary heap 
       priority_queue can be implemented using 
       1. sorted array 
       2. sorted list (unrolled list, skip list etc) 
       3. any other heap like Fibonacci heap, binomial heap 

list = doubly linked list 

set = set based on AVL Tree (usually) 
     can implemented using any other binary balancing tree like 
     1. Binary Search Tree 
     2. Red black Tree 
     3. Splay Tree 

slist = single linked list 

map = map based on Red Black Tree (usually) 
     where every node is 'pair' structure 
     can implemented using any other binary balancing tree like 
     1. Binary Search Tree 
     2. AVL Tree 
     3. Splay Tree 

deque = deque 

hash_set = set implemented using hash 

hash_map = hash table 

hash = 'Not Available', used as functor 
İlgili konular