2012-06-16 22 views
7

Estudio estructuras de datos y quiero preguntar cuáles son los equivalentes de contenedores STL.Estructuras de datos equivalentes de contenedores STL

por ejemplo

  • vector = array dinámico
  • cola = cola
  • pila = apilar
  • priority_queue = montón
  • lista = lista enlazada
  • set = árbol
  • slist = lista de enlaces individuales
  • bit_vector = vector bool
  • map = pair
  • deque =?
  • multiset =?
  • multimap =?
  • hash_set =?
  • hash_map =?
  • hash_multiset =?
  • hash_multimap =?
  • hash =?
  • bit_set =?
+0

deque = Cola de doble final. Más como un vector en el que también puedes empujar los elementos frente a frente. multi_set = Valores múltiples (no necesita tener valores únicos); multi_map = Una clave puede tener múltiples valores asociados. map! = pair pero los elementos del contenedor del mapa son par. – Mahesh

+0

'std :: hash' no es un contenedor, es un functor. –

+0

Steve: ¿podrías ser más específico cuando dices que es un funtor? –

Respuesta

6

En cuanto a los contenedores de la biblioteca estándar de C++, el estándar en sí mismo trata de no decir demasiado sobre la implementación. Sin embargo, las restricciones muy específicas sobre la complejidad de la inserción, eliminación, búsqueda, inserción de rango, etc., significan que la mayoría de las implementaciones usan los mismos tipos de estructuras de datos para los contenedores.En cuanto a algunos de sus ejemplos:

  • std :: lista: doblemente ligado lista
  • std :: set, std :: conjunto múltiple, std :: mapa, std :: multimap: auto-equilibrio binaria árboles, típicamente rojo-blacktrees.
  • hash_ *: C++ 11 proporciona unordered_set, unordered_map y multi hermanos. Estas son tablas hash.
  • bitset: matriz de tamaño fijo

creo que el STL sigue estas implementaciones.

1

conjunto y el árbol de búsqueda binaria multiset-

mapa y multimap - árbol binario de búsqueda

deque - deque

los hash* recipientes contenedores son ordenadas asociativas implementadas como tablas hash. por ej. hash_map contiene pair<key,value> que se busca utilizando la tabla hash.

en bitset

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

2

No creo que la clasificación std :: mapa <> simplemente como un "par" sería correcta. En realidad, hay una utilidad llamada std :: pair <> que en realidad es solo un par. std :: map <> almacena claves únicas y valores no únicos de una manera que hace posible usar una sintaxis similar a la de una matriz con índices que pueden ser numéricos o no.

Editar: Corregido "contenedor" a "utilidad" gracias a juanchopanza.

+0

sí, puede ser incorrecto – demosthenes

+0

Nota pedante: std :: pair no se considera un contenedor, sino una "utilidad". – 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 
Cuestiones relacionadas