Top Banner
Alonso Ramírez Manzanares Computación y Algoritmos 11.05 Contenedores asociativos en la STL de C++ mat-151 Tuesday, May 8, 18
189

Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Sep 23, 2018

Download

Documents

dangquynh
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05

Contenedores asociativos en la STL de C++

mat-151

Tuesday, May 8, 18

Page 2: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05

Variables y funciones estáticas de clase

2

Tuesday, May 8, 18

Page 3: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05

Variables y funciones estáticas de clase

• Ejemplos: Pueden ser const y se inicializan afuera de la definición de clase.

• Las funciones staticas accesan miembros estáticos

3

Tuesday, May 8, 18

Page 4: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 4

Contenedores en la STL de C++

Tuesday, May 8, 18

Page 5: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 4

Contenedores en la STL de C++

• Un contenedor es un objeto que guarda una colección de otros objetos.

Tuesday, May 8, 18

Page 6: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 4

Contenedores en la STL de C++

• Un contenedor es un objeto que guarda una colección de otros objetos.

• Están implementados como templates, lo que les dá gran flexibilidad en los tipos que soportan.

Tuesday, May 8, 18

Page 7: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 4

Contenedores en la STL de C++

• Un contenedor es un objeto que guarda una colección de otros objetos.

• Están implementados como templates, lo que les dá gran flexibilidad en los tipos que soportan.

• Los contenedores dan acceso a sus datos ya sea por acceso directo o a través de iteradores.

Tuesday, May 8, 18

Page 8: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 4

Contenedores en la STL de C++

• Un contenedor es un objeto que guarda una colección de otros objetos.

• Están implementados como templates, lo que les dá gran flexibilidad en los tipos que soportan.

• Los contenedores dan acceso a sus datos ya sea por acceso directo o a través de iteradores.

• Los iteradores son objetos de referencia con propiedades similares a los apuntadores.

Tuesday, May 8, 18

Page 9: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 4

Contenedores en la STL de C++

• Un contenedor es un objeto que guarda una colección de otros objetos.

• Están implementados como templates, lo que les dá gran flexibilidad en los tipos que soportan.

• Los contenedores dan acceso a sus datos ya sea por acceso directo o a través de iteradores.

• Los iteradores son objetos de referencia con propiedades similares a los apuntadores.

• Los contenedores implementan estructuras muy usadas en programación: arreglos dinámicos (vector), colas (queue), pilas (stack), montículos (priority_queue), listas ligadas (list), árboles (set), arreglos asociativos (map)...

Tuesday, May 8, 18

Page 10: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 5

Contenedores en la STL de C++

Tuesday, May 8, 18

Page 11: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 5

Contenedores en la STL de C++

• Varios contenedores pueden compartir funcionalidad. La decisión de cuál usar depende de la eficiencia de estas operaciones en cada contenedor.

Tuesday, May 8, 18

Page 12: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 5

Contenedores en la STL de C++

• Varios contenedores pueden compartir funcionalidad. La decisión de cuál usar depende de la eficiencia de estas operaciones en cada contenedor.

• Contenedores secuenciales:

Tuesday, May 8, 18

Page 13: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 5

Contenedores en la STL de C++

• Varios contenedores pueden compartir funcionalidad. La decisión de cuál usar depende de la eficiencia de estas operaciones en cada contenedor.

• Contenedores secuenciales:

• vector, deque, list

Tuesday, May 8, 18

Page 14: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 5

Contenedores en la STL de C++

• Varios contenedores pueden compartir funcionalidad. La decisión de cuál usar depende de la eficiencia de estas operaciones en cada contenedor.

• Contenedores secuenciales:

• vector, deque, list

• Adaptadores de contenedor:

Tuesday, May 8, 18

Page 15: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 5

Contenedores en la STL de C++

• Varios contenedores pueden compartir funcionalidad. La decisión de cuál usar depende de la eficiencia de estas operaciones en cada contenedor.

• Contenedores secuenciales:

• vector, deque, list

• Adaptadores de contenedor:

• stack, queue, priority_queue

Tuesday, May 8, 18

Page 16: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 5

Contenedores en la STL de C++

• Varios contenedores pueden compartir funcionalidad. La decisión de cuál usar depende de la eficiencia de estas operaciones en cada contenedor.

• Contenedores secuenciales:

• vector, deque, list

• Adaptadores de contenedor:

• stack, queue, priority_queue

• Contenedores asociativos:

Tuesday, May 8, 18

Page 17: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 5

Contenedores en la STL de C++

• Varios contenedores pueden compartir funcionalidad. La decisión de cuál usar depende de la eficiencia de estas operaciones en cada contenedor.

• Contenedores secuenciales:

• vector, deque, list

• Adaptadores de contenedor:

• stack, queue, priority_queue

• Contenedores asociativos:

• set, multiset, map, multimap.

Tuesday, May 8, 18

Page 18: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 6

Iteradores de contenedores

Tuesday, May 8, 18

Page 19: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 6

Iteradores de contenedores

• Existen para la gran mayoría de los contenedores estándar, y son definidos:

Tuesday, May 8, 18

Page 20: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 6

Iteradores de contenedores

• Existen para la gran mayoría de los contenedores estándar, y son definidos:

• Contenedor::iterador

Tuesday, May 8, 18

Page 21: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 6

Iteradores de contenedores

• Existen para la gran mayoría de los contenedores estándar, y son definidos:

• Contenedor::iterador

• permitiendo recorrer como un apuntador los datos con los operadores ++, ==, !=, y los dos iteradores predefinidos begin( ) y end( ).

Tuesday, May 8, 18

Page 22: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 6

Iteradores de contenedores

• Existen para la gran mayoría de los contenedores estándar, y son definidos:

• Contenedor::iterador

• permitiendo recorrer como un apuntador los datos con los operadores ++, ==, !=, y los dos iteradores predefinidos begin( ) y end( ).

Tuesday, May 8, 18

Page 23: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7

Contenedores secuenciales

Tuesday, May 8, 18

Page 24: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7

Contenedores secuenciales

• Variaciones en una secuencia lineal de valores.

Tuesday, May 8, 18

Page 25: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7

Contenedores secuenciales

• Variaciones en una secuencia lineal de valores.

• Usan templates que dependen del elemento que almacenan.

Tuesday, May 8, 18

Page 26: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7

Contenedores secuenciales

• Variaciones en una secuencia lineal de valores.

• Usan templates que dependen del elemento que almacenan.

• Inserción y eliminación.

Tuesday, May 8, 18

Page 27: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7

Contenedores secuenciales

• Variaciones en una secuencia lineal de valores.

• Usan templates que dependen del elemento que almacenan.

• Inserción y eliminación.

• Acceso aleatorio ( no todos los contenedores )

Tuesday, May 8, 18

Page 28: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7

Contenedores secuenciales

• Variaciones en una secuencia lineal de valores.

• Usan templates que dependen del elemento que almacenan.

• Inserción y eliminación.

• Acceso aleatorio ( no todos los contenedores )

• Pushing y popping en ambos extremos.

Tuesday, May 8, 18

Page 29: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7

Contenedores secuenciales

• Variaciones en una secuencia lineal de valores.

• Usan templates que dependen del elemento que almacenan.

• Inserción y eliminación.

• Acceso aleatorio ( no todos los contenedores )

• Pushing y popping en ambos extremos.

• class vector ( clase secuencial de uso general )

Tuesday, May 8, 18

Page 30: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7

Contenedores secuenciales

• Variaciones en una secuencia lineal de valores.

• Usan templates que dependen del elemento que almacenan.

• Inserción y eliminación.

• Acceso aleatorio ( no todos los contenedores )

• Pushing y popping en ambos extremos.

• class vector ( clase secuencial de uso general )

• class deque ( optimizado para insertar y eliminar elementos en los extremos, tiene acceso aleatorio )

Tuesday, May 8, 18

Page 31: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7

Contenedores secuenciales

• Variaciones en una secuencia lineal de valores.

• Usan templates que dependen del elemento que almacenan.

• Inserción y eliminación.

• Acceso aleatorio ( no todos los contenedores )

• Pushing y popping en ambos extremos.

• class vector ( clase secuencial de uso general )

• class deque ( optimizado para insertar y eliminar elementos en los extremos, tiene acceso aleatorio )

• class list ( optimizado para acceso secuencial e inserción en cualquier posición, no para acceso aleatorio )

Tuesday, May 8, 18

Page 32: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 8

Contenedores secuenciales: vector

Tuesday, May 8, 18

Page 33: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 8

Contenedores secuenciales: vector

• Están implementados como arreglos (como arreglos en C) dinámicos:

Tuesday, May 8, 18

Page 34: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 8

Contenedores secuenciales: vector

• Están implementados como arreglos (como arreglos en C) dinámicos:

• como los arreglos regulares sus elementos están almacenados en posiciones adyacentes en la memoria: permite usar iteradores y apuntadores.

Tuesday, May 8, 18

Page 35: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 8

Contenedores secuenciales: vector

• Están implementados como arreglos (como arreglos en C) dinámicos:

• como los arreglos regulares sus elementos están almacenados en posiciones adyacentes en la memoria: permite usar iteradores y apuntadores.

• el aumento o disminución del tamaño del vector (contrariamente a los arreglos regulares) es manejado automáticamente.

Tuesday, May 8, 18

Page 36: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 8

Contenedores secuenciales: vector

• Están implementados como arreglos (como arreglos en C) dinámicos:

• como los arreglos regulares sus elementos están almacenados en posiciones adyacentes en la memoria: permite usar iteradores y apuntadores.

• el aumento o disminución del tamaño del vector (contrariamente a los arreglos regulares) es manejado automáticamente.

• Acceder elementos individuales por su posición (índice) - O(1)

Tuesday, May 8, 18

Page 37: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 8

Contenedores secuenciales: vector

• Están implementados como arreglos (como arreglos en C) dinámicos:

• como los arreglos regulares sus elementos están almacenados en posiciones adyacentes en la memoria: permite usar iteradores y apuntadores.

• el aumento o disminución del tamaño del vector (contrariamente a los arreglos regulares) es manejado automáticamente.

• Acceder elementos individuales por su posición (índice) - O(1)

• Iterar los elementos en cualquier orden - O(n)

Tuesday, May 8, 18

Page 38: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 8

Contenedores secuenciales: vector

• Están implementados como arreglos (como arreglos en C) dinámicos:

• como los arreglos regulares sus elementos están almacenados en posiciones adyacentes en la memoria: permite usar iteradores y apuntadores.

• el aumento o disminución del tamaño del vector (contrariamente a los arreglos regulares) es manejado automáticamente.

• Acceder elementos individuales por su posición (índice) - O(1)

• Iterar los elementos en cualquier orden - O(n)

• Agregar o eliminar elementos al final - O(1)

Tuesday, May 8, 18

Page 39: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 8

Contenedores secuenciales: vector

• Están implementados como arreglos (como arreglos en C) dinámicos:

• como los arreglos regulares sus elementos están almacenados en posiciones adyacentes en la memoria: permite usar iteradores y apuntadores.

• el aumento o disminución del tamaño del vector (contrariamente a los arreglos regulares) es manejado automáticamente.

• Acceder elementos individuales por su posición (índice) - O(1)

• Iterar los elementos en cualquier orden - O(n)

• Agregar o eliminar elementos al final - O(1)

• Internamente los vectores - como todos los contenedores - tienen un tamaño, que representa el número de elementos en el vector.

Tuesday, May 8, 18

Page 40: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 9

Contenedores secuenciales: vector

Tuesday, May 8, 18

Page 41: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 9

Contenedores secuenciales: vector

• Los vectores también tienen capacidad, que determina el espacio adicional que se puede utilizar (para no re-dimensionar el tamaño de memoria cada vez).

Tuesday, May 8, 18

Page 42: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 9

Contenedores secuenciales: vector

• Los vectores también tienen capacidad, que determina el espacio adicional que se puede utilizar (para no re-dimensionar el tamaño de memoria cada vez).

• Re-dimensionar un vector es una operación costosa porque generalmente involucra re-copiar el vector.

Tuesday, May 8, 18

Page 43: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 9

Contenedores secuenciales: vector

• Los vectores también tienen capacidad, que determina el espacio adicional que se puede utilizar (para no re-dimensionar el tamaño de memoria cada vez).

• Re-dimensionar un vector es una operación costosa porque generalmente involucra re-copiar el vector.

• Se recomienda indicar explícitamente la capacidad para el vector con la función miembro: vector::reserve.

Tuesday, May 8, 18

Page 44: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 9

Contenedores secuenciales: vector

• Los vectores también tienen capacidad, que determina el espacio adicional que se puede utilizar (para no re-dimensionar el tamaño de memoria cada vez).

• Re-dimensionar un vector es una operación costosa porque generalmente involucra re-copiar el vector.

• Se recomienda indicar explícitamente la capacidad para el vector con la función miembro: vector::reserve.

• En su implementación en la STL de C++ los vectores toman dos parámetros:

Tuesday, May 8, 18

Page 45: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 9

Contenedores secuenciales: vector

• Los vectores también tienen capacidad, que determina el espacio adicional que se puede utilizar (para no re-dimensionar el tamaño de memoria cada vez).

• Re-dimensionar un vector es una operación costosa porque generalmente involucra re-copiar el vector.

• Se recomienda indicar explícitamente la capacidad para el vector con la función miembro: vector::reserve.

• En su implementación en la STL de C++ los vectores toman dos parámetros:

• template < class T, class Allocator = allocator<T> > class vector;

Tuesday, May 8, 18

Page 46: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 9

Contenedores secuenciales: vector

• Los vectores también tienen capacidad, que determina el espacio adicional que se puede utilizar (para no re-dimensionar el tamaño de memoria cada vez).

• Re-dimensionar un vector es una operación costosa porque generalmente involucra re-copiar el vector.

• Se recomienda indicar explícitamente la capacidad para el vector con la función miembro: vector::reserve.

• En su implementación en la STL de C++ los vectores toman dos parámetros:

• template < class T, class Allocator = allocator<T> > class vector;

• donde T es el tipo de elemento,

Tuesday, May 8, 18

Page 47: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 9

Contenedores secuenciales: vector

• Los vectores también tienen capacidad, que determina el espacio adicional que se puede utilizar (para no re-dimensionar el tamaño de memoria cada vez).

• Re-dimensionar un vector es una operación costosa porque generalmente involucra re-copiar el vector.

• Se recomienda indicar explícitamente la capacidad para el vector con la función miembro: vector::reserve.

• En su implementación en la STL de C++ los vectores toman dos parámetros:

• template < class T, class Allocator = allocator<T> > class vector;

• donde T es el tipo de elemento,

• y Allocator: tipo de modelo de reserva de memoria.

Tuesday, May 8, 18

Page 48: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 10

Contenedores secuenciales: vector

Funciones miembro:

Tuesday, May 8, 18

Page 49: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 10

Contenedores secuenciales: vector

(constructor) constructor del vector

(destructor) destructor del vector

operador = copia el contenido del vector

Funciones miembro:

Tuesday, May 8, 18

Page 50: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 10

Contenedores secuenciales: vector

(constructor) constructor del vector

(destructor) destructor del vector

operador = copia el contenido del vector

Funciones miembro:

Iteradores:

Tuesday, May 8, 18

Page 51: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 10

Contenedores secuenciales: vector

(constructor) constructor del vector

(destructor) destructor del vector

operador = copia el contenido del vector

Funciones miembro:

Iteradores:begin regresa el iterador al inicioend regresa el iterador al final

rbegin regresa el iterador reverso al inicio reverso

rend regresa el iterador reverso al final reverso

Tuesday, May 8, 18

Page 52: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 10

Contenedores secuenciales: vector

(constructor) constructor del vector

(destructor) destructor del vector

operador = copia el contenido del vector

Funciones miembro:

Iteradores:begin regresa el iterador al inicioend regresa el iterador al final

rbegin regresa el iterador reverso al inicio reverso

rend regresa el iterador reverso al final reverso

Capacidad:

Tuesday, May 8, 18

Page 53: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 10

Contenedores secuenciales: vector

(constructor) constructor del vector

(destructor) destructor del vector

operador = copia el contenido del vector

Funciones miembro:

Iteradores:begin regresa el iterador al inicioend regresa el iterador al final

rbegin regresa el iterador reverso al inicio reverso

rend regresa el iterador reverso al final reverso

Capacidad:size regresa el tamaño

max_size regresa el tamaño máximoresize cambia el tamaño

capacity regresa la capacidad de almacenamiento

empty prueba si el vector está vacío

reserve pide un cambio en la capacidad

Tuesday, May 8, 18

Page 54: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 10

Contenedores secuenciales: vector

(constructor) constructor del vector

(destructor) destructor del vector

operador = copia el contenido del vector

Funciones miembro:

Iteradores:begin regresa el iterador al inicioend regresa el iterador al final

rbegin regresa el iterador reverso al inicio reverso

rend regresa el iterador reverso al final reverso

Capacidad:size regresa el tamaño

max_size regresa el tamaño máximoresize cambia el tamaño

capacity regresa la capacidad de almacenamiento

empty prueba si el vector está vacío

reserve pide un cambio en la capacidad

Acceso a elementos:

Tuesday, May 8, 18

Page 55: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 10

Contenedores secuenciales: vector

(constructor) constructor del vector

(destructor) destructor del vector

operador = copia el contenido del vector

Funciones miembro:

Iteradores:begin regresa el iterador al inicioend regresa el iterador al final

rbegin regresa el iterador reverso al inicio reverso

rend regresa el iterador reverso al final reverso

Capacidad:size regresa el tamaño

max_size regresa el tamaño máximoresize cambia el tamaño

capacity regresa la capacidad de almacenamiento

empty prueba si el vector está vacío

reserve pide un cambio en la capacidad

Acceso a elementos:

operador [] accede un elementoat accede un elemento

front accede al primer elementoback accede al último elemento

Tuesday, May 8, 18

Page 56: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 10

Contenedores secuenciales: vector

(constructor) constructor del vector

(destructor) destructor del vector

operador = copia el contenido del vector

Funciones miembro:

Iteradores:begin regresa el iterador al inicioend regresa el iterador al final

rbegin regresa el iterador reverso al inicio reverso

rend regresa el iterador reverso al final reverso

Capacidad:size regresa el tamaño

max_size regresa el tamaño máximoresize cambia el tamaño

capacity regresa la capacidad de almacenamiento

empty prueba si el vector está vacío

reserve pide un cambio en la capacidad

Acceso a elementos:

operador [] accede un elementoat accede un elemento

front accede al primer elementoback accede al último elemento

Modificadores:

Tuesday, May 8, 18

Page 57: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 10

Contenedores secuenciales: vector

(constructor) constructor del vector

(destructor) destructor del vector

operador = copia el contenido del vector

Funciones miembro:

Iteradores:begin regresa el iterador al inicioend regresa el iterador al final

rbegin regresa el iterador reverso al inicio reverso

rend regresa el iterador reverso al final reverso

Capacidad:size regresa el tamaño

max_size regresa el tamaño máximoresize cambia el tamaño

capacity regresa la capacidad de almacenamiento

empty prueba si el vector está vacío

reserve pide un cambio en la capacidad

Acceso a elementos:

operador [] accede un elementoat accede un elemento

front accede al primer elementoback accede al último elemento

Modificadores:assign asigna un contenido al vector

push_back agrega un elemento al finalpop_back elimina el último elemento

insert inserta elementoserase borra elementos

swap intercambia el contenido de vectores

clear limpia el contenido

Tuesday, May 8, 18

Page 58: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 11

Contenedores secuenciales: vector

Tuesday, May 8, 18

Page 59: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 11

Contenedores secuenciales: vector

Tuesday, May 8, 18

Page 60: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 12

Contenedores secuenciales: vector

Tuesday, May 8, 18

Page 61: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 12

Contenedores secuenciales: vector

Tuesday, May 8, 18

Page 62: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 13

Contenedores secuenciales: vector

Tuesday, May 8, 18

Page 63: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 13

Contenedores secuenciales: vector

Tuesday, May 8, 18

Page 64: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 14

Contenedores secuenciales: deque

Tuesday, May 8, 18

Page 65: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 14

Contenedores secuenciales: deque

• double-ended-queue.

Tuesday, May 8, 18

Page 66: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 14

Contenedores secuenciales: deque

• double-ended-queue.

• Elementos individuales pueden ser accesados por su posición (índice).

Tuesday, May 8, 18

Page 67: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 14

Contenedores secuenciales: deque

• double-ended-queue.

• Elementos individuales pueden ser accesados por su posición (índice).

• Se puede iterar sobre todos los elementos en cualquier orden.

Tuesday, May 8, 18

Page 68: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 14

Contenedores secuenciales: deque

• double-ended-queue.

• Elementos individuales pueden ser accesados por su posición (índice).

• Se puede iterar sobre todos los elementos en cualquier orden.

• Los elementos pueden ser añadidos o eliminados eficientemente de los extremos - O(1)

Tuesday, May 8, 18

Page 69: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 14

Contenedores secuenciales: deque

• double-ended-queue.

• Elementos individuales pueden ser accesados por su posición (índice).

• Se puede iterar sobre todos los elementos en cualquier orden.

• Los elementos pueden ser añadidos o eliminados eficientemente de los extremos - O(1)

• Los elementos no se almacenan en espacios contiguos de la memoria (usa muchos bloques)

Tuesday, May 8, 18

Page 70: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 14

Contenedores secuenciales: deque

• double-ended-queue.

• Elementos individuales pueden ser accesados por su posición (índice).

• Se puede iterar sobre todos los elementos en cualquier orden.

• Los elementos pueden ser añadidos o eliminados eficientemente de los extremos - O(1)

• Los elementos no se almacenan en espacios contiguos de la memoria (usa muchos bloques)

• La implementación en C++ toma dos parámetros:

Tuesday, May 8, 18

Page 71: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 14

Contenedores secuenciales: deque

• double-ended-queue.

• Elementos individuales pueden ser accesados por su posición (índice).

• Se puede iterar sobre todos los elementos en cualquier orden.

• Los elementos pueden ser añadidos o eliminados eficientemente de los extremos - O(1)

• Los elementos no se almacenan en espacios contiguos de la memoria (usa muchos bloques)

• La implementación en C++ toma dos parámetros:

• template < class T, class Allocator = allocator<T> > class deque;

Tuesday, May 8, 18

Page 72: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 15

Contenedores secuenciales: deque

Podríamos haber usado corchetes, pero esta llamada genera una exception cuando se está fuera de los límites.

Tuesday, May 8, 18

Page 73: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 15

Contenedores secuenciales: deque

Podríamos haber usado corchetes, pero esta llamada genera una exception cuando se está fuera de los límites.

Tuesday, May 8, 18

Page 74: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 16

Contenedores secuenciales: list

Tuesday, May 8, 18

Page 75: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 16

Contenedores secuenciales: list

• Implementadas como listas doblemente ligadas.

Tuesday, May 8, 18

Page 76: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 16

Contenedores secuenciales: list

• Implementadas como listas doblemente ligadas.

• Inserción y eliminación eficiente (a diferencia de deque) de elementos en cualquier lugar de la secuencia (una vez encontrado, se usa insert, ver ejemplo en cplusplus) O(1).

Tuesday, May 8, 18

Page 77: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 16

Contenedores secuenciales: list

• Implementadas como listas doblemente ligadas.

• Inserción y eliminación eficiente (a diferencia de deque) de elementos en cualquier lugar de la secuencia (una vez encontrado, se usa insert, ver ejemplo en cplusplus) O(1).

• Iteración de los elementos en orden directo o reverso O(n).

Tuesday, May 8, 18

Page 78: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 16

Contenedores secuenciales: list

• Implementadas como listas doblemente ligadas.

• Inserción y eliminación eficiente (a diferencia de deque) de elementos en cualquier lugar de la secuencia (una vez encontrado, se usa insert, ver ejemplo en cplusplus) O(1).

• Iteración de los elementos en orden directo o reverso O(n).

• Son mejores para insertar, extraer y mover elementos de cualquier posición del contenedor (y en algoritmos que hacen uso intensivo de estas operaciones)

Tuesday, May 8, 18

Page 79: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 16

Contenedores secuenciales: list

• Implementadas como listas doblemente ligadas.

• Inserción y eliminación eficiente (a diferencia de deque) de elementos en cualquier lugar de la secuencia (una vez encontrado, se usa insert, ver ejemplo en cplusplus) O(1).

• Iteración de los elementos en orden directo o reverso O(n).

• Son mejores para insertar, extraer y mover elementos de cualquier posición del contenedor (y en algoritmos que hacen uso intensivo de estas operaciones)

• No tienen acceso directo a elementos en forma aleatoria y toman memoria adicional para almacenar información sobre los elementos (links).

Tuesday, May 8, 18

Page 80: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 16

Contenedores secuenciales: list

• Implementadas como listas doblemente ligadas.

• Inserción y eliminación eficiente (a diferencia de deque) de elementos en cualquier lugar de la secuencia (una vez encontrado, se usa insert, ver ejemplo en cplusplus) O(1).

• Iteración de los elementos en orden directo o reverso O(n).

• Son mejores para insertar, extraer y mover elementos de cualquier posición del contenedor (y en algoritmos que hacen uso intensivo de estas operaciones)

• No tienen acceso directo a elementos en forma aleatoria y toman memoria adicional para almacenar información sobre los elementos (links).

• template < class T, class Allocator=allocator<T> > class list;

Tuesday, May 8, 18

Page 81: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 17

Contenedores secuenciales: list

Tuesday, May 8, 18

Page 82: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 17

Contenedores secuenciales: list

Tuesday, May 8, 18

Page 83: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 18

Adaptadores de contenedores: stack

Tuesday, May 8, 18

Page 84: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 18

Adaptadores de contenedores: stack

• LIFO

Tuesday, May 8, 18

Page 85: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 18

Adaptadores de contenedores: stack

• LIFO

• Soporta las funciones empty, size, top, push, pop.

Tuesday, May 8, 18

Page 86: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 18

Adaptadores de contenedores: stack

• LIFO

• Soporta las funciones empty, size, top, push, pop.

• La implementación en C++ toma dos parámetros:

Tuesday, May 8, 18

Page 87: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 18

Adaptadores de contenedores: stack

• LIFO

• Soporta las funciones empty, size, top, push, pop.

• La implementación en C++ toma dos parámetros:

• template < class T, class Container = deque<T> > class stack;

Tuesday, May 8, 18

Page 88: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 18

Adaptadores de contenedores: stack

• LIFO

• Soporta las funciones empty, size, top, push, pop.

• La implementación en C++ toma dos parámetros:

• template < class T, class Container = deque<T> > class stack;

• donde T es el tipo de elementos

Tuesday, May 8, 18

Page 89: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 18

Adaptadores de contenedores: stack

• LIFO

• Soporta las funciones empty, size, top, push, pop.

• La implementación en C++ toma dos parámetros:

• template < class T, class Container = deque<T> > class stack;

• donde T es el tipo de elementos

• y Container es el tipo de contenedor utilizado para acceder y almacenar elementos.

Tuesday, May 8, 18

Page 90: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 18

Adaptadores de contenedores: stack

• LIFO

• Soporta las funciones empty, size, top, push, pop.

• La implementación en C++ toma dos parámetros:

• template < class T, class Container = deque<T> > class stack;

• donde T es el tipo de elementos

• y Container es el tipo de contenedor utilizado para acceder y almacenar elementos.

• Aplicaciones:

Tuesday, May 8, 18

Page 91: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 18

Adaptadores de contenedores: stack

• LIFO

• Soporta las funciones empty, size, top, push, pop.

• La implementación en C++ toma dos parámetros:

• template < class T, class Container = deque<T> > class stack;

• donde T es el tipo de elementos

• y Container es el tipo de contenedor utilizado para acceder y almacenar elementos.

• Aplicaciones:

• secuencias de undo en un editor de texto,

Tuesday, May 8, 18

Page 92: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 18

Adaptadores de contenedores: stack

• LIFO

• Soporta las funciones empty, size, top, push, pop.

• La implementación en C++ toma dos parámetros:

• template < class T, class Container = deque<T> > class stack;

• donde T es el tipo de elementos

• y Container es el tipo de contenedor utilizado para acceder y almacenar elementos.

• Aplicaciones:

• secuencias de undo en un editor de texto,

• memoria para llamadas a funciones.

Tuesday, May 8, 18

Page 93: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 19

Adaptadores de contenedores: stack

Tuesday, May 8, 18

Page 94: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 19

Adaptadores de contenedores: stack

Tuesday, May 8, 18

Page 95: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 20

Adaptadores de contenedores: queue

Tuesday, May 8, 18

Page 96: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 20

Adaptadores de contenedores: queue

• cola FIFO

Tuesday, May 8, 18

Page 97: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 20

Adaptadores de contenedores: queue

• cola FIFO

• Soporta las operaciones empty, size, front, back, push, pop.

Tuesday, May 8, 18

Page 98: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 20

Adaptadores de contenedores: queue

• cola FIFO

• Soporta las operaciones empty, size, front, back, push, pop.

• La implementación en C++ toma dos parámetros:

Tuesday, May 8, 18

Page 99: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 20

Adaptadores de contenedores: queue

• cola FIFO

• Soporta las operaciones empty, size, front, back, push, pop.

• La implementación en C++ toma dos parámetros:

• template < class T, class Container = deque <T> > class queue;

Tuesday, May 8, 18

Page 100: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 20

Adaptadores de contenedores: queue

• cola FIFO

• Soporta las operaciones empty, size, front, back, push, pop.

• La implementación en C++ toma dos parámetros:

• template < class T, class Container = deque <T> > class queue;

• Aplicaciones:

Tuesday, May 8, 18

Page 101: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 20

Adaptadores de contenedores: queue

• cola FIFO

• Soporta las operaciones empty, size, front, back, push, pop.

• La implementación en C++ toma dos parámetros:

• template < class T, class Container = deque <T> > class queue;

• Aplicaciones:

•Sistema de espera: filas de espera

Tuesday, May 8, 18

Page 102: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 21

Adaptadores de contenedores: priority_queue

Tuesday, May 8, 18

Page 103: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 21

Adaptadores de contenedores: priority_queue

• Diseñado para que el primer elemento sea siempre el más grande.

Tuesday, May 8, 18

Page 104: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 21

Adaptadores de contenedores: priority_queue

• Diseñado para que el primer elemento sea siempre el más grande.

• Solo se puede recuperar el elemento con la prioridad mayor.

Tuesday, May 8, 18

Page 105: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 21

Adaptadores de contenedores: priority_queue

• Diseñado para que el primer elemento sea siempre el más grande.

• Solo se puede recuperar el elemento con la prioridad mayor.

• Para tener la estructura de orden interno de montículo se necesita tener acceso aleatorio a los elementos.

Tuesday, May 8, 18

Page 106: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 21

Adaptadores de contenedores: priority_queue

• Diseñado para que el primer elemento sea siempre el más grande.

• Solo se puede recuperar el elemento con la prioridad mayor.

• Para tener la estructura de orden interno de montículo se necesita tener acceso aleatorio a los elementos.

• El orden se mantiene con los algoritmos make_heap, push_heap y pop_heap.

Tuesday, May 8, 18

Page 107: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 21

Adaptadores de contenedores: priority_queue

• Diseñado para que el primer elemento sea siempre el más grande.

• Solo se puede recuperar el elemento con la prioridad mayor.

• Para tener la estructura de orden interno de montículo se necesita tener acceso aleatorio a los elementos.

• El orden se mantiene con los algoritmos make_heap, push_heap y pop_heap.

• La implementación en C++ toma tres parametros:

Tuesday, May 8, 18

Page 108: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 21

Adaptadores de contenedores: priority_queue

• Diseñado para que el primer elemento sea siempre el más grande.

• Solo se puede recuperar el elemento con la prioridad mayor.

• Para tener la estructura de orden interno de montículo se necesita tener acceso aleatorio a los elementos.

• El orden se mantiene con los algoritmos make_heap, push_heap y pop_heap.

• La implementación en C++ toma tres parametros:

• template < class T, class Container = vector<T>, class Compare = less<typename Container::value_type> > class priority_queue;

Tuesday, May 8, 18

Page 109: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 21

Adaptadores de contenedores: priority_queue

• Diseñado para que el primer elemento sea siempre el más grande.

• Solo se puede recuperar el elemento con la prioridad mayor.

• Para tener la estructura de orden interno de montículo se necesita tener acceso aleatorio a los elementos.

• El orden se mantiene con los algoritmos make_heap, push_heap y pop_heap.

• La implementación en C++ toma tres parametros:

• template < class T, class Container = vector<T>, class Compare = less<typename Container::value_type> > class priority_queue;

• donde T es el tipo de elemento,Container es el contenedor de base y Compare es la clase que implementa las funciones que determinan el orden.

Tuesday, May 8, 18

Page 110: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 22

Adaptadores de contenedores: priority_queue

Tuesday, May 8, 18

Page 111: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 22

Adaptadores de contenedores: priority_queue

• No usan iteradores

Tuesday, May 8, 18

Page 112: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 22

Adaptadores de contenedores: priority_queue

• No usan iteradores

• la función miembro pop() regresa el objeto prioritario mientras que top() solo regresa un apuntador hacia él.

Tuesday, May 8, 18

Page 113: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 22

Adaptadores de contenedores: priority_queue

• No usan iteradores

• la función miembro pop() regresa el objeto prioritario mientras que top() solo regresa un apuntador hacia él.

• Aplicaciones:

Tuesday, May 8, 18

Page 114: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 22

Adaptadores de contenedores: priority_queue

• No usan iteradores

• la función miembro pop() regresa el objeto prioritario mientras que top() solo regresa un apuntador hacia él.

• Aplicaciones:

• tareas de un robot ordenadas por prioridad

Tuesday, May 8, 18

Page 115: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 22

Adaptadores de contenedores: priority_queue

• No usan iteradores

• la función miembro pop() regresa el objeto prioritario mientras que top() solo regresa un apuntador hacia él.

• Aplicaciones:

• tareas de un robot ordenadas por prioridad

• pacientes de un hospital.

Tuesday, May 8, 18

Page 116: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05

Tuesday, May 8, 18

Page 117: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05

Tuesday, May 8, 18

Page 118: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 24

Contenedores de bits

Tuesday, May 8, 18

Page 119: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 24

Contenedores de bits

• A veces se puede necesitar manipular contenedores de bits (elementos con solo dos valores posibles 0 o 1, true y false ...), particularmente en aplicaciones que tienen que ver con el hardware.

Tuesday, May 8, 18

Page 120: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 24

Contenedores de bits

• A veces se puede necesitar manipular contenedores de bits (elementos con solo dos valores posibles 0 o 1, true y false ...), particularmente en aplicaciones que tienen que ver con el hardware.

• La clase es muy similar a un arreglo regular pero optimiza espacio para almacenamiento de estos tipos de datos.

Tuesday, May 8, 18

Page 121: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 24

Contenedores de bits

• A veces se puede necesitar manipular contenedores de bits (elementos con solo dos valores posibles 0 o 1, true y false ...), particularmente en aplicaciones que tienen que ver con el hardware.

• La clase es muy similar a un arreglo regular pero optimiza espacio para almacenamiento de estos tipos de datos.

• Existen dos contenedores adaptados a este caso:

Tuesday, May 8, 18

Page 122: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 24

Contenedores de bits

• A veces se puede necesitar manipular contenedores de bits (elementos con solo dos valores posibles 0 o 1, true y false ...), particularmente en aplicaciones que tienen que ver con el hardware.

• La clase es muy similar a un arreglo regular pero optimiza espacio para almacenamiento de estos tipos de datos.

• Existen dos contenedores adaptados a este caso:

• bitset<n>, patrón parametrizado por el número de bits a considerar (tamaño fijo), ejemplos de funciones: to_ulong , flip , etc.

Tuesday, May 8, 18

Page 123: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 24

Contenedores de bits

• A veces se puede necesitar manipular contenedores de bits (elementos con solo dos valores posibles 0 o 1, true y false ...), particularmente en aplicaciones que tienen que ver con el hardware.

• La clase es muy similar a un arreglo regular pero optimiza espacio para almacenamiento de estos tipos de datos.

• Existen dos contenedores adaptados a este caso:

• bitset<n>, patrón parametrizado por el número de bits a considerar (tamaño fijo), ejemplos de funciones: to_ulong , flip , etc.

• vector<bool>, implementación optimizada de un vector en el caso de bits.

Tuesday, May 8, 18

Page 124: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 25

Contenedores asociativos

Tuesday, May 8, 18

Page 125: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 25

Contenedores asociativos

• Como su nombre lo indica, estos contenedores asocian llaves y valores en una sola estructura.

Tuesday, May 8, 18

Page 126: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 25

Contenedores asociativos

• Como su nombre lo indica, estos contenedores asocian llaves y valores en una sola estructura.

• La idea de poder acceder valores (objetos) a partir de la llave.

Tuesday, May 8, 18

Page 127: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 25

Contenedores asociativos

• Como su nombre lo indica, estos contenedores asocian llaves y valores en una sola estructura.

• La idea de poder acceder valores (objetos) a partir de la llave.

• set y multiset solo contienen valores ( en este caso son iguales que la llave )

Tuesday, May 8, 18

Page 128: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 25

Contenedores asociativos

• Como su nombre lo indica, estos contenedores asocian llaves y valores en una sola estructura.

• La idea de poder acceder valores (objetos) a partir de la llave.

• set y multiset solo contienen valores ( en este caso son iguales que la llave )

• map y multimap realizan asociación llave,valor usando el mismo tipo de estructuras.

Tuesday, May 8, 18

Page 129: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 25

Contenedores asociativos

• Como su nombre lo indica, estos contenedores asocian llaves y valores en una sola estructura.

• La idea de poder acceder valores (objetos) a partir de la llave.

• set y multiset solo contienen valores ( en este caso son iguales que la llave )

• map y multimap realizan asociación llave,valor usando el mismo tipo de estructuras.

• La meta esencial de estos contenedores es probar de manera eficiente la existencia de objetos: por ejemplo si una palabra está o no en el diccionario y si está cual es su definición.

Tuesday, May 8, 18

Page 130: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 26

Contenedores asociativos

Tuesday, May 8, 18

Page 131: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 26

Contenedores asociativos

• Los métodos comunes entre ellos son:

Tuesday, May 8, 18

Page 132: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 26

Contenedores asociativos

• Los métodos comunes entre ellos son:

• insert( ) : agrega nuevos objetos si su llave no está ya en el contenedor

Tuesday, May 8, 18

Page 133: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 26

Contenedores asociativos

• Los métodos comunes entre ellos son:

• insert( ) : agrega nuevos objetos si su llave no está ya en el contenedor

• count( ) : cuenta el número de objetos que tiene una llave dada ( 0 o 1 en el caso de set y map y un entero positivo en el caso de multiset y multimap)

Tuesday, May 8, 18

Page 134: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 26

Contenedores asociativos

• Los métodos comunes entre ellos son:

• insert( ) : agrega nuevos objetos si su llave no está ya en el contenedor

• count( ) : cuenta el número de objetos que tiene una llave dada ( 0 o 1 en el caso de set y map y un entero positivo en el caso de multiset y multimap)

• find( ) : regresa un iterador sobre la posición en que se encuentra la primera llave dada o end( ) si no.

Tuesday, May 8, 18

Page 135: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 27

Contenedores asociativos: set

Tuesday, May 8, 18

Page 136: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 27

Contenedores asociativos: set

• Contenedor asociativo que almacena elementos únicos (las llaves)

Tuesday, May 8, 18

Page 137: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 27

Contenedores asociativos: set

• Contenedor asociativo que almacena elementos únicos (las llaves)

• La idea principal es determinar rápidamente una relación de membresia de un objeto con respecto al contenedor (noción de conjunto matemático) .

Tuesday, May 8, 18

Page 138: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 27

Contenedores asociativos: set

• Contenedor asociativo que almacena elementos únicos (las llaves)

• La idea principal es determinar rápidamente una relación de membresia de un objeto con respecto al contenedor (noción de conjunto matemático) .

• La implementación más común usa árboles binarios de búsqueda auto-equilibrados y por construcción ordena los datos.

Tuesday, May 8, 18

Page 139: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 27

Contenedores asociativos: set

• Contenedor asociativo que almacena elementos únicos (las llaves)

• La idea principal es determinar rápidamente una relación de membresia de un objeto con respecto al contenedor (noción de conjunto matemático) .

• La implementación más común usa árboles binarios de búsqueda auto-equilibrados y por construcción ordena los datos.

• Los objetos ya no son nombrados por índice sino por su valor.

Tuesday, May 8, 18

Page 140: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 27

Contenedores asociativos: set

• Contenedor asociativo que almacena elementos únicos (las llaves)

• La idea principal es determinar rápidamente una relación de membresia de un objeto con respecto al contenedor (noción de conjunto matemático) .

• La implementación más común usa árboles binarios de búsqueda auto-equilibrados y por construcción ordena los datos.

• Los objetos ya no son nombrados por índice sino por su valor.

• Diseñados para acceder los elementos por medio de su llave.

Tuesday, May 8, 18

Page 141: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 27

Contenedores asociativos: set

• Contenedor asociativo que almacena elementos únicos (las llaves)

• La idea principal es determinar rápidamente una relación de membresia de un objeto con respecto al contenedor (noción de conjunto matemático) .

• La implementación más común usa árboles binarios de búsqueda auto-equilibrados y por construcción ordena los datos.

• Los objetos ya no son nombrados por índice sino por su valor.

• Diseñados para acceder los elementos por medio de su llave.

• Es util en las operaciones de unión, intersección, diferencia, y prueba de membresía.

Tuesday, May 8, 18

Page 142: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 27

Contenedores asociativos: set

• Contenedor asociativo que almacena elementos únicos (las llaves)

• La idea principal es determinar rápidamente una relación de membresia de un objeto con respecto al contenedor (noción de conjunto matemático) .

• La implementación más común usa árboles binarios de búsqueda auto-equilibrados y por construcción ordena los datos.

• Los objetos ya no son nombrados por índice sino por su valor.

• Diseñados para acceder los elementos por medio de su llave.

• Es util en las operaciones de unión, intersección, diferencia, y prueba de membresía.

• El tipo de dato debe implementar un operador de comparación.

Tuesday, May 8, 18

Page 143: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 28

Contenedores asociativos: set

Tuesday, May 8, 18

Page 144: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 28

Contenedores asociativos: set

• Su implementación en C++ toma tres parámetros:

Tuesday, May 8, 18

Page 145: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 28

Contenedores asociativos: set

• Su implementación en C++ toma tres parámetros:

• template < class Key, class Compare = less<Key>, class Allocator = allocator<Key> > class set.

Tuesday, May 8, 18

Page 146: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 28

Contenedores asociativos: set

• Su implementación en C++ toma tres parámetros:

• template < class Key, class Compare = less<Key>, class Allocator = allocator<Key> > class set.

• donde Key es el tipo de elementos llave en el contenedor. Cada elemento en un conjunto es también su llave.

Tuesday, May 8, 18

Page 147: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 28

Contenedores asociativos: set

• Su implementación en C++ toma tres parámetros:

• template < class Key, class Compare = less<Key>, class Allocator = allocator<Key> > class set.

• donde Key es el tipo de elementos llave en el contenedor. Cada elemento en un conjunto es también su llave.

• Compare es la función de comparación y regresa un bool.

Tuesday, May 8, 18

Page 148: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 28

Contenedores asociativos: set

• Su implementación en C++ toma tres parámetros:

• template < class Key, class Compare = less<Key>, class Allocator = allocator<Key> > class set.

• donde Key es el tipo de elementos llave en el contenedor. Cada elemento en un conjunto es también su llave.

• Compare es la función de comparación y regresa un bool.

• Allocator es el objeto para definir el modelo de almacenamiento.

Tuesday, May 8, 18

Page 149: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 29

Contenedores asociativos: set

Tuesday, May 8, 18

Page 150: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 29

Contenedores asociativos: set

• Ejemplo: índice de un libro

Tuesday, May 8, 18

Page 151: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 29

Contenedores asociativos: set

• Ejemplo: índice de un libro

• leer el texto del libro

Tuesday, May 8, 18

Page 152: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 29

Contenedores asociativos: set

• Ejemplo: índice de un libro

• leer el texto del libro

• para cada palabra encontrada, intentar añadirla en el set

Tuesday, May 8, 18

Page 153: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 29

Contenedores asociativos: set

• Ejemplo: índice de un libro

• leer el texto del libro

• para cada palabra encontrada, intentar añadirla en el set

• si ya está, dejarla

Tuesday, May 8, 18

Page 154: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 29

Contenedores asociativos: set

• Ejemplo: índice de un libro

• leer el texto del libro

• para cada palabra encontrada, intentar añadirla en el set

• si ya está, dejarla

• si no está, añadirla al set de tal manera que el conjunto quede ordenado y el árbol subyacente esté equilibrado.

Tuesday, May 8, 18

Page 155: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 30

Contenedores asociativos: set

Tuesday, May 8, 18

Page 156: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 30

Contenedores asociativos: set

Tuesday, May 8, 18

Page 157: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 31

Contenedores asociativos: multiset

Tuesday, May 8, 18

Page 158: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 31

Contenedores asociativos: multiset

• El contenedor multiset tiene la propiedad de poder almacenar varios elementos con la misma llave.

Tuesday, May 8, 18

Page 159: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 31

Contenedores asociativos: multiset

• El contenedor multiset tiene la propiedad de poder almacenar varios elementos con la misma llave.

• Su implementación en C++ toma tres parámetros

Tuesday, May 8, 18

Page 160: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 31

Contenedores asociativos: multiset

• El contenedor multiset tiene la propiedad de poder almacenar varios elementos con la misma llave.

• Su implementación en C++ toma tres parámetros

• template < class key, class Compare = less<key>, class Allocator=allocator<key> > class multiset;

Tuesday, May 8, 18

Page 161: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 32

Contenedores asociativos: multiset

Text

Tuesday, May 8, 18

Page 162: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 32

Contenedores asociativos: multiset

Text

Tuesday, May 8, 18

Page 163: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 33

Contenedores asociativos: map

Tuesday, May 8, 18

Page 164: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 33

Contenedores asociativos: map

• Contenedores formados de la combinación llave y valor.

Tuesday, May 8, 18

Page 165: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 33

Contenedores asociativos: map

• Contenedores formados de la combinación llave y valor.

• La llave se usa para identificar de manera única al elemento mientras que el valor mapeado está asociado a la llave.

Tuesday, May 8, 18

Page 166: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 33

Contenedores asociativos: map

• Contenedores formados de la combinación llave y valor.

• La llave se usa para identificar de manera única al elemento mientras que el valor mapeado está asociado a la llave.

• Un ejemplo típico de un map es la guía telefónica donde el nombre es la llave y el número telefónico es el valor mapeado.

Tuesday, May 8, 18

Page 167: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 33

Contenedores asociativos: map

• Contenedores formados de la combinación llave y valor.

• La llave se usa para identificar de manera única al elemento mientras que el valor mapeado está asociado a la llave.

• Un ejemplo típico de un map es la guía telefónica donde el nombre es la llave y el número telefónico es el valor mapeado.

• Internamente los elementos del mapa están ordenados de menor a mayor valor de llave.

Tuesday, May 8, 18

Page 168: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 33

Contenedores asociativos: map

• Contenedores formados de la combinación llave y valor.

• La llave se usa para identificar de manera única al elemento mientras que el valor mapeado está asociado a la llave.

• Un ejemplo típico de un map es la guía telefónica donde el nombre es la llave y el número telefónico es el valor mapeado.

• Internamente los elementos del mapa están ordenados de menor a mayor valor de llave.

• Están diseñados para ser eficientes obteniendo sus elementos por una llave.

Tuesday, May 8, 18

Page 169: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 33

Contenedores asociativos: map

• Contenedores formados de la combinación llave y valor.

• La llave se usa para identificar de manera única al elemento mientras que el valor mapeado está asociado a la llave.

• Un ejemplo típico de un map es la guía telefónica donde el nombre es la llave y el número telefónico es el valor mapeado.

• Internamente los elementos del mapa están ordenados de menor a mayor valor de llave.

• Están diseñados para ser eficientes obteniendo sus elementos por una llave.

• Están implementados con árboles binarios de búsqueda auto-equilibrados.

Tuesday, May 8, 18

Page 170: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 34

Contenedores asociativos: map

Tuesday, May 8, 18

Page 171: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 34

Contenedores asociativos: map

• Las características principales de map son:

Tuesday, May 8, 18

Page 172: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 34

Contenedores asociativos: map

• Las características principales de map son:

• Valores únicos de llave: dos elementos no pueden tener la misma llave.

Tuesday, May 8, 18

Page 173: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 34

Contenedores asociativos: map

• Las características principales de map son:

• Valores únicos de llave: dos elementos no pueden tener la misma llave.

• Cada elemento se compone por un par (llave,valor).

Tuesday, May 8, 18

Page 174: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 34

Contenedores asociativos: map

• Las características principales de map son:

• Valores únicos de llave: dos elementos no pueden tener la misma llave.

• Cada elemento se compone por un par (llave,valor).

• Los elementos siguen una relación de orden en todo momento.

Tuesday, May 8, 18

Page 175: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 34

Contenedores asociativos: map

• Las características principales de map son:

• Valores únicos de llave: dos elementos no pueden tener la misma llave.

• Cada elemento se compone por un par (llave,valor).

• Los elementos siguen una relación de orden en todo momento.

• En su implementación en C++ toman 4 parámetros:

Tuesday, May 8, 18

Page 176: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 34

Contenedores asociativos: map

• Las características principales de map son:

• Valores únicos de llave: dos elementos no pueden tener la misma llave.

• Cada elemento se compone por un par (llave,valor).

• Los elementos siguen una relación de orden en todo momento.

• En su implementación en C++ toman 4 parámetros:

• template < class Key, class T, class Compare=less<Key>, class Allocator=allocator<pair<const key, T>> class map;

Tuesday, May 8, 18

Page 177: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 34

Contenedores asociativos: map

• Las características principales de map son:

• Valores únicos de llave: dos elementos no pueden tener la misma llave.

• Cada elemento se compone por un par (llave,valor).

• Los elementos siguen una relación de orden en todo momento.

• En su implementación en C++ toman 4 parámetros:

• template < class Key, class T, class Compare=less<Key>, class Allocator=allocator<pair<const key, T>> class map;

• donde Key es el tipo de valores de llave, T es el tipo de valor mapeado.

Tuesday, May 8, 18

Page 178: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 34

Contenedores asociativos: map

• Las características principales de map son:

• Valores únicos de llave: dos elementos no pueden tener la misma llave.

• Cada elemento se compone por un par (llave,valor).

• Los elementos siguen una relación de orden en todo momento.

• En su implementación en C++ toman 4 parámetros:

• template < class Key, class T, class Compare=less<Key>, class Allocator=allocator<pair<const key, T>> class map;

• donde Key es el tipo de valores de llave, T es el tipo de valor mapeado.

• Compare es la clase de comparación y Allocator es el modelo de almacenamiento.

Tuesday, May 8, 18

Page 179: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 35

Contenedores asociativos: map

Tuesday, May 8, 18

Page 180: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 35

Contenedores asociativos: map

Tuesday, May 8, 18

Page 181: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 36

Contenedores asociativos: multimap

• Igual a un map pero soporta llaves duplicadas.

Tuesday, May 8, 18

Page 182: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05

Tuesday, May 8, 18

Page 183: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 38

Contenedores asociativos: extensiones

Tuesday, May 8, 18

Page 184: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 38

Contenedores asociativos: extensiones

• De manera similar a set, multiset, map o multimap, se implementaron hash_set, hash_multiset, hash_map y hash_multimap con tablas de hash.

Tuesday, May 8, 18

Page 185: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 38

Contenedores asociativos: extensiones

• De manera similar a set, multiset, map o multimap, se implementaron hash_set, hash_multiset, hash_map y hash_multimap con tablas de hash.

• En este caso las llaves no están ordenadas pero debe existir una función de hash para cada tipo de llave.

Tuesday, May 8, 18

Page 186: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 38

Contenedores asociativos: extensiones

• De manera similar a set, multiset, map o multimap, se implementaron hash_set, hash_multiset, hash_map y hash_multimap con tablas de hash.

• En este caso las llaves no están ordenadas pero debe existir una función de hash para cada tipo de llave.

• Estos contenedores no fueron parte de la librería estándar de C++, estuvieron incluidos en las extensiones de STL de SGI y también en librerías muy usadas tales como la GNU C++ Library usando el __gnu_cxx namespace.

Tuesday, May 8, 18

Page 187: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 38

Contenedores asociativos: extensiones

• De manera similar a set, multiset, map o multimap, se implementaron hash_set, hash_multiset, hash_map y hash_multimap con tablas de hash.

• En este caso las llaves no están ordenadas pero debe existir una función de hash para cada tipo de llave.

• Estos contenedores no fueron parte de la librería estándar de C++, estuvieron incluidos en las extensiones de STL de SGI y también en librerías muy usadas tales como la GNU C++ Library usando el __gnu_cxx namespace.

• Fueron agregadas en la STL con los nombres de unordered_set, unordered_multiset, unordered_map y unordered_multimap.

Tuesday, May 8, 18

Page 188: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05

Tuesday, May 8, 18

Page 189: Contenedores asociativos en la STL de C++ - cimat.mxalram/comp_algo/clase22.pdf · Alonso Ramírez Manzanares Computación y Algoritmos 11.05 7 Contenedores secuenciales • Variaciones

Alonso Ramírez Manzanares Computación y Algoritmos 11.05 40

Referencias

• Thinking in C++ Vol. 1. Eckel, Bruce.

• http://www.cplusplus.com/reference/stl

• http://www.java2s.com/Code/Cpp/CatalogCpp.htm

• http://www.mochima.com/tutorials/STL.html

• http://www.sgi.com/tech/stl/HashedAssociativeContainer.html

Tuesday, May 8, 18