08.05.2013 Views

Contenedores asociativos en la STL de C++ - Cimat

Contenedores asociativos en la STL de C++ - Cimat

Contenedores asociativos en la STL de C++ - Cimat

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

mat-151<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 2


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

• Un cont<strong>en</strong>edor es un objeto que guarda una colección <strong>de</strong> otros objetos.<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 2


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

• Un cont<strong>en</strong>edor es un objeto que guarda una colección <strong>de</strong> otros objetos.<br />

• Están implem<strong>en</strong>tados como temp<strong>la</strong>tes, lo que les dá gran flexibilidad <strong>en</strong> los<br />

tipos que soportan.<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 2


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

• Un cont<strong>en</strong>edor es un objeto que guarda una colección <strong>de</strong> otros objetos.<br />

• Están implem<strong>en</strong>tados como temp<strong>la</strong>tes, lo que les dá gran flexibilidad <strong>en</strong> los<br />

tipos que soportan.<br />

• Los cont<strong>en</strong>edores dan acceso a sus datos ya sea por acceso directo o a través<br />

<strong>de</strong> iteradores.<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 2


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

• Un cont<strong>en</strong>edor es un objeto que guarda una colección <strong>de</strong> otros objetos.<br />

• Están implem<strong>en</strong>tados como temp<strong>la</strong>tes, lo que les dá gran flexibilidad <strong>en</strong> los<br />

tipos que soportan.<br />

• Los cont<strong>en</strong>edores dan acceso a sus datos ya sea por acceso directo o a través<br />

<strong>de</strong> iteradores.<br />

• Los iteradores son objetos <strong>de</strong> refer<strong>en</strong>cia con propieda<strong>de</strong>s simi<strong>la</strong>res a los<br />

apuntadores.<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 2


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

• Un cont<strong>en</strong>edor es un objeto que guarda una colección <strong>de</strong> otros objetos.<br />

• Están implem<strong>en</strong>tados como temp<strong>la</strong>tes, lo que les dá gran flexibilidad <strong>en</strong> los<br />

tipos que soportan.<br />

• Los cont<strong>en</strong>edores dan acceso a sus datos ya sea por acceso directo o a través<br />

<strong>de</strong> iteradores.<br />

• Los iteradores son objetos <strong>de</strong> refer<strong>en</strong>cia con propieda<strong>de</strong>s simi<strong>la</strong>res a los<br />

apuntadores.<br />

• Los cont<strong>en</strong>edores implem<strong>en</strong>tan estructuras muy usadas <strong>en</strong> programación:<br />

arreglos dinámicos (vector), co<strong>la</strong>s (queue), pi<strong>la</strong>s (stack), montículos<br />

(priority_queue), listas ligadas (list), árboles (set), arreglos <strong>asociativos</strong><br />

(map)...<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 2


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 3


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

• Varios cont<strong>en</strong>edores pued<strong>en</strong> compartir funcionalidad. La <strong>de</strong>cisión <strong>de</strong> cuál usar<br />

<strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> <strong>la</strong> efici<strong>en</strong>cia <strong>de</strong> estas operaciones <strong>en</strong> cada cont<strong>en</strong>edor.<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 3


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

• Varios cont<strong>en</strong>edores pued<strong>en</strong> compartir funcionalidad. La <strong>de</strong>cisión <strong>de</strong> cuál usar<br />

<strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> <strong>la</strong> efici<strong>en</strong>cia <strong>de</strong> estas operaciones <strong>en</strong> cada cont<strong>en</strong>edor.<br />

• <strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales:<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 3


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

• Varios cont<strong>en</strong>edores pued<strong>en</strong> compartir funcionalidad. La <strong>de</strong>cisión <strong>de</strong> cuál usar<br />

<strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> <strong>la</strong> efici<strong>en</strong>cia <strong>de</strong> estas operaciones <strong>en</strong> cada cont<strong>en</strong>edor.<br />

• <strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales:<br />

• vector, <strong>de</strong>que, list<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 3


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

• Varios cont<strong>en</strong>edores pued<strong>en</strong> compartir funcionalidad. La <strong>de</strong>cisión <strong>de</strong> cuál usar<br />

<strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> <strong>la</strong> efici<strong>en</strong>cia <strong>de</strong> estas operaciones <strong>en</strong> cada cont<strong>en</strong>edor.<br />

• <strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales:<br />

• vector, <strong>de</strong>que, list<br />

• Adaptadores <strong>de</strong> cont<strong>en</strong>edor:<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 3


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

• Varios cont<strong>en</strong>edores pued<strong>en</strong> compartir funcionalidad. La <strong>de</strong>cisión <strong>de</strong> cuál usar<br />

<strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> <strong>la</strong> efici<strong>en</strong>cia <strong>de</strong> estas operaciones <strong>en</strong> cada cont<strong>en</strong>edor.<br />

• <strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales:<br />

• vector, <strong>de</strong>que, list<br />

• Adaptadores <strong>de</strong> cont<strong>en</strong>edor:<br />

• stack, queue, priority_queue<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 3


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

• Varios cont<strong>en</strong>edores pued<strong>en</strong> compartir funcionalidad. La <strong>de</strong>cisión <strong>de</strong> cuál usar<br />

<strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> <strong>la</strong> efici<strong>en</strong>cia <strong>de</strong> estas operaciones <strong>en</strong> cada cont<strong>en</strong>edor.<br />

• <strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales:<br />

• vector, <strong>de</strong>que, list<br />

• Adaptadores <strong>de</strong> cont<strong>en</strong>edor:<br />

• stack, queue, priority_queue<br />

• <strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>:<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 3


<strong>Cont<strong>en</strong>edores</strong> <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong><br />

• Varios cont<strong>en</strong>edores pued<strong>en</strong> compartir funcionalidad. La <strong>de</strong>cisión <strong>de</strong> cuál usar<br />

<strong>de</strong>p<strong>en</strong><strong>de</strong> <strong>de</strong> <strong>la</strong> efici<strong>en</strong>cia <strong>de</strong> estas operaciones <strong>en</strong> cada cont<strong>en</strong>edor.<br />

• <strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales:<br />

• vector, <strong>de</strong>que, list<br />

• Adaptadores <strong>de</strong> cont<strong>en</strong>edor:<br />

• stack, queue, priority_queue<br />

• <strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>:<br />

• set, multiset, map, multimap.<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 3


Iteradores <strong>de</strong> cont<strong>en</strong>edores<br />

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


Iteradores <strong>de</strong> cont<strong>en</strong>edores<br />

• Exist<strong>en</strong> para <strong>la</strong> gran mayoría <strong>de</strong> los cont<strong>en</strong>edores estándar, y son <strong>de</strong>finidos:<br />

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


Iteradores <strong>de</strong> cont<strong>en</strong>edores<br />

• Exist<strong>en</strong> para <strong>la</strong> gran mayoría <strong>de</strong> los cont<strong>en</strong>edores estándar, y son <strong>de</strong>finidos:<br />

• Cont<strong>en</strong>edor::iterador<br />

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


Iteradores <strong>de</strong> cont<strong>en</strong>edores<br />

• Exist<strong>en</strong> para <strong>la</strong> gran mayoría <strong>de</strong> los cont<strong>en</strong>edores estándar, y son <strong>de</strong>finidos:<br />

• Cont<strong>en</strong>edor::iterador<br />

• permiti<strong>en</strong>do recorrer como un apuntador los datos con los operadores ++,<br />

==, !=, y los dos iteradores pre<strong>de</strong>finidos begin( ) y <strong>en</strong>d( ).<br />

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


Iteradores <strong>de</strong> cont<strong>en</strong>edores<br />

• Exist<strong>en</strong> para <strong>la</strong> gran mayoría <strong>de</strong> los cont<strong>en</strong>edores estándar, y son <strong>de</strong>finidos:<br />

• Cont<strong>en</strong>edor::iterador<br />

• permiti<strong>en</strong>do recorrer como un apuntador los datos con los operadores ++,<br />

==, !=, y los dos iteradores pre<strong>de</strong>finidos begin( ) y <strong>en</strong>d( ).<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales<br />

• Variaciones <strong>en</strong> una secu<strong>en</strong>cia linear <strong>de</strong> valores.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales<br />

• Variaciones <strong>en</strong> una secu<strong>en</strong>cia linear <strong>de</strong> valores.<br />

• Usan temp<strong>la</strong>tes que <strong>de</strong>p<strong>en</strong>d<strong>en</strong> <strong>de</strong>l elem<strong>en</strong>to que almac<strong>en</strong>an.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales<br />

• Variaciones <strong>en</strong> una secu<strong>en</strong>cia linear <strong>de</strong> valores.<br />

• Usan temp<strong>la</strong>tes que <strong>de</strong>p<strong>en</strong>d<strong>en</strong> <strong>de</strong>l elem<strong>en</strong>to que almac<strong>en</strong>an.<br />

• Inserción y eliminación.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales<br />

• Variaciones <strong>en</strong> una secu<strong>en</strong>cia linear <strong>de</strong> valores.<br />

• Usan temp<strong>la</strong>tes que <strong>de</strong>p<strong>en</strong>d<strong>en</strong> <strong>de</strong>l elem<strong>en</strong>to que almac<strong>en</strong>an.<br />

• Inserción y eliminación.<br />

• Acceso aleatorio ( no todos los cont<strong>en</strong>edores )<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales<br />

• Variaciones <strong>en</strong> una secu<strong>en</strong>cia linear <strong>de</strong> valores.<br />

• Usan temp<strong>la</strong>tes que <strong>de</strong>p<strong>en</strong>d<strong>en</strong> <strong>de</strong>l elem<strong>en</strong>to que almac<strong>en</strong>an.<br />

• Inserción y eliminación.<br />

• Acceso aleatorio ( no todos los cont<strong>en</strong>edores )<br />

• Pushing y popping <strong>en</strong> ambos extremos.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales<br />

• Variaciones <strong>en</strong> una secu<strong>en</strong>cia linear <strong>de</strong> valores.<br />

• Usan temp<strong>la</strong>tes que <strong>de</strong>p<strong>en</strong>d<strong>en</strong> <strong>de</strong>l elem<strong>en</strong>to que almac<strong>en</strong>an.<br />

• Inserción y eliminación.<br />

• Acceso aleatorio ( no todos los cont<strong>en</strong>edores )<br />

• Pushing y popping <strong>en</strong> ambos extremos.<br />

• c<strong>la</strong>ss vector ( c<strong>la</strong>se secu<strong>en</strong>cial <strong>de</strong> uso g<strong>en</strong>eral )<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales<br />

• Variaciones <strong>en</strong> una secu<strong>en</strong>cia linear <strong>de</strong> valores.<br />

• Usan temp<strong>la</strong>tes que <strong>de</strong>p<strong>en</strong>d<strong>en</strong> <strong>de</strong>l elem<strong>en</strong>to que almac<strong>en</strong>an.<br />

• Inserción y eliminación.<br />

• Acceso aleatorio ( no todos los cont<strong>en</strong>edores )<br />

• Pushing y popping <strong>en</strong> ambos extremos.<br />

• c<strong>la</strong>ss vector ( c<strong>la</strong>se secu<strong>en</strong>cial <strong>de</strong> uso g<strong>en</strong>eral )<br />

• c<strong>la</strong>ss <strong>de</strong>que ( optimizado para insertar y eliminar elem<strong>en</strong>tos <strong>en</strong> los extremos,<br />

ti<strong>en</strong>e acceso aleatorio )<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales<br />

• Variaciones <strong>en</strong> una secu<strong>en</strong>cia linear <strong>de</strong> valores.<br />

• Usan temp<strong>la</strong>tes que <strong>de</strong>p<strong>en</strong>d<strong>en</strong> <strong>de</strong>l elem<strong>en</strong>to que almac<strong>en</strong>an.<br />

• Inserción y eliminación.<br />

• Acceso aleatorio ( no todos los cont<strong>en</strong>edores )<br />

• Pushing y popping <strong>en</strong> ambos extremos.<br />

• c<strong>la</strong>ss vector ( c<strong>la</strong>se secu<strong>en</strong>cial <strong>de</strong> uso g<strong>en</strong>eral )<br />

• c<strong>la</strong>ss <strong>de</strong>que ( optimizado para insertar y eliminar elem<strong>en</strong>tos <strong>en</strong> los extremos,<br />

ti<strong>en</strong>e acceso aleatorio )<br />

• c<strong>la</strong>ss list ( optimizado para acceso secu<strong>en</strong>cial e inserción <strong>en</strong> cualquier<br />

posición, no para acceso aleatorio )<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Están implem<strong>en</strong>tados como arreglos (como arreglos <strong>en</strong> C) dinámicos:<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Están implem<strong>en</strong>tados como arreglos (como arreglos <strong>en</strong> C) dinámicos:<br />

• como los arreglos regu<strong>la</strong>res sus elem<strong>en</strong>tos están almac<strong>en</strong>ados <strong>en</strong> posiciones<br />

adyac<strong>en</strong>tes <strong>en</strong> <strong>la</strong> memoria: permite usar iteradores y apuntadores.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Están implem<strong>en</strong>tados como arreglos (como arreglos <strong>en</strong> C) dinámicos:<br />

• como los arreglos regu<strong>la</strong>res sus elem<strong>en</strong>tos están almac<strong>en</strong>ados <strong>en</strong> posiciones<br />

adyac<strong>en</strong>tes <strong>en</strong> <strong>la</strong> memoria: permite usar iteradores y apuntadores.<br />

• el aum<strong>en</strong>to o disminución <strong>de</strong>l tamaño <strong>de</strong>l vector (contrariam<strong>en</strong>te a los<br />

arreglos regu<strong>la</strong>res) es manejado automáticam<strong>en</strong>te.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Están implem<strong>en</strong>tados como arreglos (como arreglos <strong>en</strong> C) dinámicos:<br />

• como los arreglos regu<strong>la</strong>res sus elem<strong>en</strong>tos están almac<strong>en</strong>ados <strong>en</strong> posiciones<br />

adyac<strong>en</strong>tes <strong>en</strong> <strong>la</strong> memoria: permite usar iteradores y apuntadores.<br />

• el aum<strong>en</strong>to o disminución <strong>de</strong>l tamaño <strong>de</strong>l vector (contrariam<strong>en</strong>te a los<br />

arreglos regu<strong>la</strong>res) es manejado automáticam<strong>en</strong>te.<br />

• Acce<strong>de</strong>r elem<strong>en</strong>tos individuales por su posición (índice) - O(1)<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Están implem<strong>en</strong>tados como arreglos (como arreglos <strong>en</strong> C) dinámicos:<br />

• como los arreglos regu<strong>la</strong>res sus elem<strong>en</strong>tos están almac<strong>en</strong>ados <strong>en</strong> posiciones<br />

adyac<strong>en</strong>tes <strong>en</strong> <strong>la</strong> memoria: permite usar iteradores y apuntadores.<br />

• el aum<strong>en</strong>to o disminución <strong>de</strong>l tamaño <strong>de</strong>l vector (contrariam<strong>en</strong>te a los<br />

arreglos regu<strong>la</strong>res) es manejado automáticam<strong>en</strong>te.<br />

• Acce<strong>de</strong>r elem<strong>en</strong>tos individuales por su posición (índice) - O(1)<br />

• Iterar los elem<strong>en</strong>tos <strong>en</strong> cualquier ord<strong>en</strong> - O(n)<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Están implem<strong>en</strong>tados como arreglos (como arreglos <strong>en</strong> C) dinámicos:<br />

• como los arreglos regu<strong>la</strong>res sus elem<strong>en</strong>tos están almac<strong>en</strong>ados <strong>en</strong> posiciones<br />

adyac<strong>en</strong>tes <strong>en</strong> <strong>la</strong> memoria: permite usar iteradores y apuntadores.<br />

• el aum<strong>en</strong>to o disminución <strong>de</strong>l tamaño <strong>de</strong>l vector (contrariam<strong>en</strong>te a los<br />

arreglos regu<strong>la</strong>res) es manejado automáticam<strong>en</strong>te.<br />

• Acce<strong>de</strong>r elem<strong>en</strong>tos individuales por su posición (índice) - O(1)<br />

• Iterar los elem<strong>en</strong>tos <strong>en</strong> cualquier ord<strong>en</strong> - O(n)<br />

• Agregar o eliminar elem<strong>en</strong>tos al final - O(1)<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Están implem<strong>en</strong>tados como arreglos (como arreglos <strong>en</strong> C) dinámicos:<br />

• como los arreglos regu<strong>la</strong>res sus elem<strong>en</strong>tos están almac<strong>en</strong>ados <strong>en</strong> posiciones<br />

adyac<strong>en</strong>tes <strong>en</strong> <strong>la</strong> memoria: permite usar iteradores y apuntadores.<br />

• el aum<strong>en</strong>to o disminución <strong>de</strong>l tamaño <strong>de</strong>l vector (contrariam<strong>en</strong>te a los<br />

arreglos regu<strong>la</strong>res) es manejado automáticam<strong>en</strong>te.<br />

• Acce<strong>de</strong>r elem<strong>en</strong>tos individuales por su posición (índice) - O(1)<br />

• Iterar los elem<strong>en</strong>tos <strong>en</strong> cualquier ord<strong>en</strong> - O(n)<br />

• Agregar o eliminar elem<strong>en</strong>tos al final - O(1)<br />

• Internam<strong>en</strong>te los vectores - como todos los cont<strong>en</strong>edores - ti<strong>en</strong><strong>en</strong> un tamaño,<br />

que repres<strong>en</strong>ta el número <strong>de</strong> elem<strong>en</strong>tos <strong>en</strong> el vector.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Los vectores también ti<strong>en</strong><strong>en</strong> capacidad, que <strong>de</strong>termina el espacio adicional que se<br />

pue<strong>de</strong> utilizar (para no re-dim<strong>en</strong>sionar el tamaño <strong>de</strong> memoria cada vez).<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Los vectores también ti<strong>en</strong><strong>en</strong> capacidad, que <strong>de</strong>termina el espacio adicional que se<br />

pue<strong>de</strong> utilizar (para no re-dim<strong>en</strong>sionar el tamaño <strong>de</strong> memoria cada vez).<br />

• Re-dim<strong>en</strong>sionar un vector es una operación costosa porque g<strong>en</strong>eralm<strong>en</strong>te<br />

involucra re-copiar el vector.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Los vectores también ti<strong>en</strong><strong>en</strong> capacidad, que <strong>de</strong>termina el espacio adicional que se<br />

pue<strong>de</strong> utilizar (para no re-dim<strong>en</strong>sionar el tamaño <strong>de</strong> memoria cada vez).<br />

• Re-dim<strong>en</strong>sionar un vector es una operación costosa porque g<strong>en</strong>eralm<strong>en</strong>te<br />

involucra re-copiar el vector.<br />

• Se recomi<strong>en</strong>da indicar explícitam<strong>en</strong>te <strong>la</strong> capacidad para el vector con <strong>la</strong><br />

función miembro: vector::reserve.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Los vectores también ti<strong>en</strong><strong>en</strong> capacidad, que <strong>de</strong>termina el espacio adicional que se<br />

pue<strong>de</strong> utilizar (para no re-dim<strong>en</strong>sionar el tamaño <strong>de</strong> memoria cada vez).<br />

• Re-dim<strong>en</strong>sionar un vector es una operación costosa porque g<strong>en</strong>eralm<strong>en</strong>te<br />

involucra re-copiar el vector.<br />

• Se recomi<strong>en</strong>da indicar explícitam<strong>en</strong>te <strong>la</strong> capacidad para el vector con <strong>la</strong><br />

función miembro: vector::reserve.<br />

• En su implem<strong>en</strong>tación <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong> los vectores toman dos parámetros:<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Los vectores también ti<strong>en</strong><strong>en</strong> capacidad, que <strong>de</strong>termina el espacio adicional que se<br />

pue<strong>de</strong> utilizar (para no re-dim<strong>en</strong>sionar el tamaño <strong>de</strong> memoria cada vez).<br />

• Re-dim<strong>en</strong>sionar un vector es una operación costosa porque g<strong>en</strong>eralm<strong>en</strong>te<br />

involucra re-copiar el vector.<br />

• Se recomi<strong>en</strong>da indicar explícitam<strong>en</strong>te <strong>la</strong> capacidad para el vector con <strong>la</strong><br />

función miembro: vector::reserve.<br />

• En su implem<strong>en</strong>tación <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong> los vectores toman dos parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Allocator = allocator > c<strong>la</strong>ss vector;<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Los vectores también ti<strong>en</strong><strong>en</strong> capacidad, que <strong>de</strong>termina el espacio adicional que se<br />

pue<strong>de</strong> utilizar (para no re-dim<strong>en</strong>sionar el tamaño <strong>de</strong> memoria cada vez).<br />

• Re-dim<strong>en</strong>sionar un vector es una operación costosa porque g<strong>en</strong>eralm<strong>en</strong>te<br />

involucra re-copiar el vector.<br />

• Se recomi<strong>en</strong>da indicar explícitam<strong>en</strong>te <strong>la</strong> capacidad para el vector con <strong>la</strong><br />

función miembro: vector::reserve.<br />

• En su implem<strong>en</strong>tación <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong> los vectores toman dos parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Allocator = allocator > c<strong>la</strong>ss vector;<br />

• don<strong>de</strong> T es el tipo <strong>de</strong> elem<strong>en</strong>to,<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

• Los vectores también ti<strong>en</strong><strong>en</strong> capacidad, que <strong>de</strong>termina el espacio adicional que se<br />

pue<strong>de</strong> utilizar (para no re-dim<strong>en</strong>sionar el tamaño <strong>de</strong> memoria cada vez).<br />

• Re-dim<strong>en</strong>sionar un vector es una operación costosa porque g<strong>en</strong>eralm<strong>en</strong>te<br />

involucra re-copiar el vector.<br />

• Se recomi<strong>en</strong>da indicar explícitam<strong>en</strong>te <strong>la</strong> capacidad para el vector con <strong>la</strong><br />

función miembro: vector::reserve.<br />

• En su implem<strong>en</strong>tación <strong>en</strong> <strong>la</strong> <strong>STL</strong> <strong>de</strong> <strong>C++</strong> los vectores toman dos parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Allocator = allocator > c<strong>la</strong>ss vector;<br />

• don<strong>de</strong> T es el tipo <strong>de</strong> elem<strong>en</strong>to,<br />

• y Allocator: tipo <strong>de</strong> mo<strong>de</strong>lo <strong>de</strong> reserva <strong>de</strong> memoria.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

Funciones miembro:<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

Funciones miembro:<br />

(constructor) constructor <strong>de</strong>l vector<br />

(<strong>de</strong>structor) <strong>de</strong>structor <strong>de</strong>l vector<br />

operador = copia el cont<strong>en</strong>ido <strong>de</strong>l vector<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

Funciones miembro:<br />

(constructor) constructor <strong>de</strong>l vector<br />

(<strong>de</strong>structor) <strong>de</strong>structor <strong>de</strong>l vector<br />

operador = copia el cont<strong>en</strong>ido <strong>de</strong>l vector<br />

Iteradores:<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

Funciones miembro:<br />

(constructor) constructor <strong>de</strong>l vector<br />

(<strong>de</strong>structor) <strong>de</strong>structor <strong>de</strong>l vector<br />

operador = copia el cont<strong>en</strong>ido <strong>de</strong>l vector<br />

Iteradores:<br />

begin regresa el iterador al inicio<br />

<strong>en</strong>d regresa el iterador al final<br />

rbegin<br />

r<strong>en</strong>d<br />

regresa el iterador reverso al<br />

inicio reverso<br />

regresa el iterador reverso al<br />

final reverso<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

Funciones miembro:<br />

(constructor) constructor <strong>de</strong>l vector<br />

(<strong>de</strong>structor) <strong>de</strong>structor <strong>de</strong>l vector<br />

operador = copia el cont<strong>en</strong>ido <strong>de</strong>l vector<br />

Iteradores:<br />

begin regresa el iterador al inicio<br />

<strong>en</strong>d regresa el iterador al final<br />

rbegin<br />

r<strong>en</strong>d<br />

Capacidad:<br />

regresa el iterador reverso al<br />

inicio reverso<br />

regresa el iterador reverso al<br />

final reverso<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

Funciones miembro:<br />

(constructor) constructor <strong>de</strong>l vector<br />

(<strong>de</strong>structor) <strong>de</strong>structor <strong>de</strong>l vector<br />

operador = copia el cont<strong>en</strong>ido <strong>de</strong>l vector<br />

Iteradores:<br />

begin regresa el iterador al inicio<br />

<strong>en</strong>d regresa el iterador al final<br />

rbegin<br />

r<strong>en</strong>d<br />

Capacidad:<br />

size regresa el tamaño<br />

regresa el iterador reverso al<br />

inicio reverso<br />

regresa el iterador reverso al<br />

final reverso<br />

max_size regresa el tamaño máximo<br />

resize cambia el tamaño<br />

capacity<br />

regresa <strong>la</strong> capacidad <strong>de</strong><br />

almac<strong>en</strong>ami<strong>en</strong>to<br />

empty prueba si el vector está vacío<br />

reserve pi<strong>de</strong> un cambio <strong>en</strong> <strong>la</strong> capacidad<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

Funciones miembro:<br />

(constructor) constructor <strong>de</strong>l vector<br />

(<strong>de</strong>structor) <strong>de</strong>structor <strong>de</strong>l vector<br />

operador = copia el cont<strong>en</strong>ido <strong>de</strong>l vector<br />

Iteradores:<br />

begin regresa el iterador al inicio<br />

<strong>en</strong>d regresa el iterador al final<br />

rbegin<br />

r<strong>en</strong>d<br />

Capacidad:<br />

size regresa el tamaño<br />

regresa el iterador reverso al<br />

inicio reverso<br />

regresa el iterador reverso al<br />

final reverso<br />

max_size regresa el tamaño máximo<br />

resize cambia el tamaño<br />

capacity<br />

regresa <strong>la</strong> capacidad <strong>de</strong><br />

almac<strong>en</strong>ami<strong>en</strong>to<br />

empty prueba si el vector está vacío<br />

reserve pi<strong>de</strong> un cambio <strong>en</strong> <strong>la</strong> capacidad<br />

Acceso a elem<strong>en</strong>tos:<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

Funciones miembro:<br />

(constructor) constructor <strong>de</strong>l vector<br />

(<strong>de</strong>structor) <strong>de</strong>structor <strong>de</strong>l vector<br />

operador = copia el cont<strong>en</strong>ido <strong>de</strong>l vector<br />

Iteradores:<br />

begin regresa el iterador al inicio<br />

<strong>en</strong>d regresa el iterador al final<br />

rbegin<br />

r<strong>en</strong>d<br />

Capacidad:<br />

size regresa el tamaño<br />

regresa el iterador reverso al<br />

inicio reverso<br />

regresa el iterador reverso al<br />

final reverso<br />

max_size regresa el tamaño máximo<br />

resize cambia el tamaño<br />

capacity<br />

regresa <strong>la</strong> capacidad <strong>de</strong><br />

almac<strong>en</strong>ami<strong>en</strong>to<br />

empty prueba si el vector está vacío<br />

reserve pi<strong>de</strong> un cambio <strong>en</strong> <strong>la</strong> capacidad<br />

Acceso a elem<strong>en</strong>tos:<br />

operador [] acce<strong>de</strong> un elem<strong>en</strong>to<br />

at acce<strong>de</strong> un elem<strong>en</strong>to<br />

front acce<strong>de</strong> al primer elem<strong>en</strong>to<br />

back acce<strong>de</strong> al último elem<strong>en</strong>to<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

Funciones miembro:<br />

(constructor) constructor <strong>de</strong>l vector<br />

(<strong>de</strong>structor) <strong>de</strong>structor <strong>de</strong>l vector<br />

operador = copia el cont<strong>en</strong>ido <strong>de</strong>l vector<br />

Iteradores:<br />

begin regresa el iterador al inicio<br />

<strong>en</strong>d regresa el iterador al final<br />

rbegin<br />

r<strong>en</strong>d<br />

Capacidad:<br />

size regresa el tamaño<br />

regresa el iterador reverso al<br />

inicio reverso<br />

regresa el iterador reverso al<br />

final reverso<br />

max_size regresa el tamaño máximo<br />

resize cambia el tamaño<br />

capacity<br />

regresa <strong>la</strong> capacidad <strong>de</strong><br />

almac<strong>en</strong>ami<strong>en</strong>to<br />

empty prueba si el vector está vacío<br />

reserve pi<strong>de</strong> un cambio <strong>en</strong> <strong>la</strong> capacidad<br />

Acceso a elem<strong>en</strong>tos:<br />

operador [] acce<strong>de</strong> un elem<strong>en</strong>to<br />

at acce<strong>de</strong> un elem<strong>en</strong>to<br />

front acce<strong>de</strong> al primer elem<strong>en</strong>to<br />

back acce<strong>de</strong> al último elem<strong>en</strong>to<br />

Modificadores:<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

Funciones miembro:<br />

(constructor) constructor <strong>de</strong>l vector<br />

(<strong>de</strong>structor) <strong>de</strong>structor <strong>de</strong>l vector<br />

operador = copia el cont<strong>en</strong>ido <strong>de</strong>l vector<br />

Iteradores:<br />

begin regresa el iterador al inicio<br />

<strong>en</strong>d regresa el iterador al final<br />

rbegin<br />

r<strong>en</strong>d<br />

Capacidad:<br />

size regresa el tamaño<br />

regresa el iterador reverso al<br />

inicio reverso<br />

regresa el iterador reverso al<br />

final reverso<br />

max_size regresa el tamaño máximo<br />

resize cambia el tamaño<br />

capacity<br />

regresa <strong>la</strong> capacidad <strong>de</strong><br />

almac<strong>en</strong>ami<strong>en</strong>to<br />

empty prueba si el vector está vacío<br />

reserve pi<strong>de</strong> un cambio <strong>en</strong> <strong>la</strong> capacidad<br />

Acceso a elem<strong>en</strong>tos:<br />

operador [] acce<strong>de</strong> un elem<strong>en</strong>to<br />

at acce<strong>de</strong> un elem<strong>en</strong>to<br />

front acce<strong>de</strong> al primer elem<strong>en</strong>to<br />

back acce<strong>de</strong> al último elem<strong>en</strong>to<br />

Modificadores:<br />

assign assigna un cont<strong>en</strong>ido al vector<br />

push_back agrega un elem<strong>en</strong>to al final<br />

pop_back elimina el último elem<strong>en</strong>to<br />

insert inserta elem<strong>en</strong>tos<br />

erase borra elem<strong>en</strong>tos<br />

swap<br />

intercambia el cont<strong>en</strong>ido <strong>de</strong><br />

vectores<br />

clear limpia el cont<strong>en</strong>ido<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

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


<strong>Cont<strong>en</strong>edores</strong><br />

secu<strong>en</strong>ciales: vector<br />

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


<strong>Cont<strong>en</strong>edores</strong><br />

secu<strong>en</strong>ciales: vector<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: vector<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: <strong>de</strong>que<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: <strong>de</strong>que<br />

• double-<strong>en</strong><strong>de</strong>d-queue.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: <strong>de</strong>que<br />

• double-<strong>en</strong><strong>de</strong>d-queue.<br />

• Elem<strong>en</strong>tos individuales pued<strong>en</strong> ser accesados por su posición (índice).<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: <strong>de</strong>que<br />

• double-<strong>en</strong><strong>de</strong>d-queue.<br />

• Elem<strong>en</strong>tos individuales pued<strong>en</strong> ser accesados por su posición (índice).<br />

• Se pue<strong>de</strong> iterar sobre todos los elem<strong>en</strong>tos <strong>en</strong> cualquier ord<strong>en</strong>.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: <strong>de</strong>que<br />

• double-<strong>en</strong><strong>de</strong>d-queue.<br />

• Elem<strong>en</strong>tos individuales pued<strong>en</strong> ser accesados por su posición (índice).<br />

• Se pue<strong>de</strong> iterar sobre todos los elem<strong>en</strong>tos <strong>en</strong> cualquier ord<strong>en</strong>.<br />

• Los elem<strong>en</strong>tos pued<strong>en</strong> ser añadidos o eliminados efici<strong>en</strong>tem<strong>en</strong>te <strong>de</strong> los<br />

extremos - O(1)<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: <strong>de</strong>que<br />

• double-<strong>en</strong><strong>de</strong>d-queue.<br />

• Elem<strong>en</strong>tos individuales pued<strong>en</strong> ser accesados por su posición (índice).<br />

• Se pue<strong>de</strong> iterar sobre todos los elem<strong>en</strong>tos <strong>en</strong> cualquier ord<strong>en</strong>.<br />

• Los elem<strong>en</strong>tos pued<strong>en</strong> ser añadidos o eliminados efici<strong>en</strong>tem<strong>en</strong>te <strong>de</strong> los<br />

extremos - O(1)<br />

• Los elem<strong>en</strong>tos no se almac<strong>en</strong>an <strong>en</strong> espacios contiguos <strong>de</strong> <strong>la</strong> memoria (usa<br />

muchos bloques)<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: <strong>de</strong>que<br />

• double-<strong>en</strong><strong>de</strong>d-queue.<br />

• Elem<strong>en</strong>tos individuales pued<strong>en</strong> ser accesados por su posición (índice).<br />

• Se pue<strong>de</strong> iterar sobre todos los elem<strong>en</strong>tos <strong>en</strong> cualquier ord<strong>en</strong>.<br />

• Los elem<strong>en</strong>tos pued<strong>en</strong> ser añadidos o eliminados efici<strong>en</strong>tem<strong>en</strong>te <strong>de</strong> los<br />

extremos - O(1)<br />

• Los elem<strong>en</strong>tos no se almac<strong>en</strong>an <strong>en</strong> espacios contiguos <strong>de</strong> <strong>la</strong> memoria (usa<br />

muchos bloques)<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma dos parámetros:<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: <strong>de</strong>que<br />

• double-<strong>en</strong><strong>de</strong>d-queue.<br />

• Elem<strong>en</strong>tos individuales pued<strong>en</strong> ser accesados por su posición (índice).<br />

• Se pue<strong>de</strong> iterar sobre todos los elem<strong>en</strong>tos <strong>en</strong> cualquier ord<strong>en</strong>.<br />

• Los elem<strong>en</strong>tos pued<strong>en</strong> ser añadidos o eliminados efici<strong>en</strong>tem<strong>en</strong>te <strong>de</strong> los<br />

extremos - O(1)<br />

• Los elem<strong>en</strong>tos no se almac<strong>en</strong>an <strong>en</strong> espacios contiguos <strong>de</strong> <strong>la</strong> memoria (usa<br />

muchos bloques)<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma dos parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Allocator = allocator > c<strong>la</strong>ss <strong>de</strong>que;<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: <strong>de</strong>que<br />

Podríamos haber usado<br />

corchetes, pero esta l<strong>la</strong>mada<br />

g<strong>en</strong>era una exception cuando se<br />

está fuera <strong>de</strong> los límites.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: <strong>de</strong>que<br />

Podríamos haber usado<br />

corchetes, pero esta l<strong>la</strong>mada<br />

g<strong>en</strong>era una exception cuando se<br />

está fuera <strong>de</strong> los límites.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: list<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: list<br />

• Implem<strong>en</strong>tadas como listas doblem<strong>en</strong>te ligadas.<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: list<br />

• Implem<strong>en</strong>tadas como listas doblem<strong>en</strong>te ligadas.<br />

• Inserción y eliminación efici<strong>en</strong>te (a difer<strong>en</strong>cia <strong>de</strong> <strong>de</strong>que) <strong>de</strong> elem<strong>en</strong>tos <strong>en</strong><br />

cualquier lugar <strong>de</strong> <strong>la</strong> secu<strong>en</strong>cia (una vez <strong>en</strong>contrado, se usa insert, ver<br />

ejemplo <strong>en</strong> cplusplus) O(1).<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: list<br />

• Implem<strong>en</strong>tadas como listas doblem<strong>en</strong>te ligadas.<br />

• Inserción y eliminación efici<strong>en</strong>te (a difer<strong>en</strong>cia <strong>de</strong> <strong>de</strong>que) <strong>de</strong> elem<strong>en</strong>tos <strong>en</strong><br />

cualquier lugar <strong>de</strong> <strong>la</strong> secu<strong>en</strong>cia (una vez <strong>en</strong>contrado, se usa insert, ver<br />

ejemplo <strong>en</strong> cplusplus) O(1).<br />

• Iteración <strong>de</strong> los elem<strong>en</strong>tos <strong>en</strong> ord<strong>en</strong> directo o reverso O(n).<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: list<br />

• Implem<strong>en</strong>tadas como listas doblem<strong>en</strong>te ligadas.<br />

• Inserción y eliminación efici<strong>en</strong>te (a difer<strong>en</strong>cia <strong>de</strong> <strong>de</strong>que) <strong>de</strong> elem<strong>en</strong>tos <strong>en</strong><br />

cualquier lugar <strong>de</strong> <strong>la</strong> secu<strong>en</strong>cia (una vez <strong>en</strong>contrado, se usa insert, ver<br />

ejemplo <strong>en</strong> cplusplus) O(1).<br />

• Iteración <strong>de</strong> los elem<strong>en</strong>tos <strong>en</strong> ord<strong>en</strong> directo o reverso O(n).<br />

• Son mejores para insertar, extraer y mover elem<strong>en</strong>tos <strong>de</strong> cualquier posición<br />

<strong>de</strong>l cont<strong>en</strong>edor (y <strong>en</strong> algoritmos que hac<strong>en</strong> uso int<strong>en</strong>sivo <strong>de</strong> estas<br />

operaciones)<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: list<br />

• Implem<strong>en</strong>tadas como listas doblem<strong>en</strong>te ligadas.<br />

• Inserción y eliminación efici<strong>en</strong>te (a difer<strong>en</strong>cia <strong>de</strong> <strong>de</strong>que) <strong>de</strong> elem<strong>en</strong>tos <strong>en</strong><br />

cualquier lugar <strong>de</strong> <strong>la</strong> secu<strong>en</strong>cia (una vez <strong>en</strong>contrado, se usa insert, ver<br />

ejemplo <strong>en</strong> cplusplus) O(1).<br />

• Iteración <strong>de</strong> los elem<strong>en</strong>tos <strong>en</strong> ord<strong>en</strong> directo o reverso O(n).<br />

• Son mejores para insertar, extraer y mover elem<strong>en</strong>tos <strong>de</strong> cualquier posición<br />

<strong>de</strong>l cont<strong>en</strong>edor (y <strong>en</strong> algoritmos que hac<strong>en</strong> uso int<strong>en</strong>sivo <strong>de</strong> estas<br />

operaciones)<br />

• No ti<strong>en</strong><strong>en</strong> acceso directo a elem<strong>en</strong>tos <strong>en</strong> forma aleatoria y toman memoria<br />

adicional para almac<strong>en</strong>ar información sobre los elem<strong>en</strong>tos (links).<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: list<br />

• Implem<strong>en</strong>tadas como listas doblem<strong>en</strong>te ligadas.<br />

• Inserción y eliminación efici<strong>en</strong>te (a difer<strong>en</strong>cia <strong>de</strong> <strong>de</strong>que) <strong>de</strong> elem<strong>en</strong>tos <strong>en</strong><br />

cualquier lugar <strong>de</strong> <strong>la</strong> secu<strong>en</strong>cia (una vez <strong>en</strong>contrado, se usa insert, ver<br />

ejemplo <strong>en</strong> cplusplus) O(1).<br />

• Iteración <strong>de</strong> los elem<strong>en</strong>tos <strong>en</strong> ord<strong>en</strong> directo o reverso O(n).<br />

• Son mejores para insertar, extraer y mover elem<strong>en</strong>tos <strong>de</strong> cualquier posición<br />

<strong>de</strong>l cont<strong>en</strong>edor (y <strong>en</strong> algoritmos que hac<strong>en</strong> uso int<strong>en</strong>sivo <strong>de</strong> estas<br />

operaciones)<br />

• No ti<strong>en</strong><strong>en</strong> acceso directo a elem<strong>en</strong>tos <strong>en</strong> forma aleatoria y toman memoria<br />

adicional para almac<strong>en</strong>ar información sobre los elem<strong>en</strong>tos (links).<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Allocator=allocator > c<strong>la</strong>ss list;<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: list<br />

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


<strong>Cont<strong>en</strong>edores</strong> secu<strong>en</strong>ciales: list<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: stack<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: stack<br />

• LIFO<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: stack<br />

• LIFO<br />

• Soporta <strong>la</strong>s funciones empty, size, top, push, pop.<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: stack<br />

• LIFO<br />

• Soporta <strong>la</strong>s funciones empty, size, top, push, pop.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma dos parámetros:<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: stack<br />

• LIFO<br />

• Soporta <strong>la</strong>s funciones empty, size, top, push, pop.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma dos parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Container = <strong>de</strong>que > c<strong>la</strong>ss stack;<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: stack<br />

• LIFO<br />

• Soporta <strong>la</strong>s funciones empty, size, top, push, pop.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma dos parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Container = <strong>de</strong>que > c<strong>la</strong>ss stack;<br />

• don<strong>de</strong> T es el tipo <strong>de</strong> elem<strong>en</strong>tos<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: stack<br />

• LIFO<br />

• Soporta <strong>la</strong>s funciones empty, size, top, push, pop.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma dos parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Container = <strong>de</strong>que > c<strong>la</strong>ss stack;<br />

• don<strong>de</strong> T es el tipo <strong>de</strong> elem<strong>en</strong>tos<br />

• y Container es el tipo <strong>de</strong> cont<strong>en</strong>edor utilizado para acce<strong>de</strong>r y almac<strong>en</strong>ar<br />

elem<strong>en</strong>tos.<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: stack<br />

• LIFO<br />

• Soporta <strong>la</strong>s funciones empty, size, top, push, pop.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma dos parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Container = <strong>de</strong>que > c<strong>la</strong>ss stack;<br />

• don<strong>de</strong> T es el tipo <strong>de</strong> elem<strong>en</strong>tos<br />

• y Container es el tipo <strong>de</strong> cont<strong>en</strong>edor utilizado para acce<strong>de</strong>r y almac<strong>en</strong>ar<br />

elem<strong>en</strong>tos.<br />

• Aplicaciones:<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: stack<br />

• LIFO<br />

• Soporta <strong>la</strong>s funciones empty, size, top, push, pop.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma dos parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Container = <strong>de</strong>que > c<strong>la</strong>ss stack;<br />

• don<strong>de</strong> T es el tipo <strong>de</strong> elem<strong>en</strong>tos<br />

• y Container es el tipo <strong>de</strong> cont<strong>en</strong>edor utilizado para acce<strong>de</strong>r y almac<strong>en</strong>ar<br />

elem<strong>en</strong>tos.<br />

• Aplicaciones:<br />

• secu<strong>en</strong>cias <strong>de</strong> undo <strong>en</strong> un editor <strong>de</strong> texto,<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: stack<br />

• LIFO<br />

• Soporta <strong>la</strong>s funciones empty, size, top, push, pop.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma dos parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Container = <strong>de</strong>que > c<strong>la</strong>ss stack;<br />

• don<strong>de</strong> T es el tipo <strong>de</strong> elem<strong>en</strong>tos<br />

• y Container es el tipo <strong>de</strong> cont<strong>en</strong>edor utilizado para acce<strong>de</strong>r y almac<strong>en</strong>ar<br />

elem<strong>en</strong>tos.<br />

• Aplicaciones:<br />

• secu<strong>en</strong>cias <strong>de</strong> undo <strong>en</strong> un editor <strong>de</strong> texto,<br />

• memoria para l<strong>la</strong>madas a funciones.<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: stack<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: stack<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: queue<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: queue<br />

• co<strong>la</strong> FIFO<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: queue<br />

• co<strong>la</strong> FIFO<br />

• Soporta <strong>la</strong>s operaciones empty, size, front, back, push, pop.<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: queue<br />

• co<strong>la</strong> FIFO<br />

• Soporta <strong>la</strong>s operaciones empty, size, front, back, push, pop.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma dos parámetros:<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: queue<br />

• co<strong>la</strong> FIFO<br />

• Soporta <strong>la</strong>s operaciones empty, size, front, back, push, pop.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma dos parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Container = <strong>de</strong>que > c<strong>la</strong>ss queue;<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: queue<br />

• co<strong>la</strong> FIFO<br />

• Soporta <strong>la</strong>s operaciones empty, size, front, back, push, pop.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma dos parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Container = <strong>de</strong>que > c<strong>la</strong>ss queue;<br />

• Aplicaciones:<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: queue<br />

• co<strong>la</strong> FIFO<br />

• Soporta <strong>la</strong>s operaciones empty, size, front, back, push, pop.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma dos parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Container = <strong>de</strong>que > c<strong>la</strong>ss queue;<br />

• Aplicaciones:<br />

•Sistema <strong>de</strong> espera: fi<strong>la</strong>s <strong>de</strong> espera<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

• Diseñado para que el primer elem<strong>en</strong>to sea siempre el más gran<strong>de</strong>.<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

• Diseñado para que el primer elem<strong>en</strong>to sea siempre el más gran<strong>de</strong>.<br />

• Solo se pue<strong>de</strong> recuperar el elem<strong>en</strong>to con <strong>la</strong> prioridad mayor.<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

• Diseñado para que el primer elem<strong>en</strong>to sea siempre el más gran<strong>de</strong>.<br />

• Solo se pue<strong>de</strong> recuperar el elem<strong>en</strong>to con <strong>la</strong> prioridad mayor.<br />

• Para t<strong>en</strong>er <strong>la</strong> estructura <strong>de</strong> ord<strong>en</strong> interno <strong>de</strong> montículo se necesita t<strong>en</strong>er<br />

acceso aleatorio a los elem<strong>en</strong>tos.<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

• Diseñado para que el primer elem<strong>en</strong>to sea siempre el más gran<strong>de</strong>.<br />

• Solo se pue<strong>de</strong> recuperar el elem<strong>en</strong>to con <strong>la</strong> prioridad mayor.<br />

• Para t<strong>en</strong>er <strong>la</strong> estructura <strong>de</strong> ord<strong>en</strong> interno <strong>de</strong> montículo se necesita t<strong>en</strong>er<br />

acceso aleatorio a los elem<strong>en</strong>tos.<br />

• El ord<strong>en</strong> se manti<strong>en</strong>e con los algoritmos make_heap, push_heap y pop_heap.<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

• Diseñado para que el primer elem<strong>en</strong>to sea siempre el más gran<strong>de</strong>.<br />

• Solo se pue<strong>de</strong> recuperar el elem<strong>en</strong>to con <strong>la</strong> prioridad mayor.<br />

• Para t<strong>en</strong>er <strong>la</strong> estructura <strong>de</strong> ord<strong>en</strong> interno <strong>de</strong> montículo se necesita t<strong>en</strong>er<br />

acceso aleatorio a los elem<strong>en</strong>tos.<br />

• El ord<strong>en</strong> se manti<strong>en</strong>e con los algoritmos make_heap, push_heap y pop_heap.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma tres parametros:<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

• Diseñado para que el primer elem<strong>en</strong>to sea siempre el más gran<strong>de</strong>.<br />

• Solo se pue<strong>de</strong> recuperar el elem<strong>en</strong>to con <strong>la</strong> prioridad mayor.<br />

• Para t<strong>en</strong>er <strong>la</strong> estructura <strong>de</strong> ord<strong>en</strong> interno <strong>de</strong> montículo se necesita t<strong>en</strong>er<br />

acceso aleatorio a los elem<strong>en</strong>tos.<br />

• El ord<strong>en</strong> se manti<strong>en</strong>e con los algoritmos make_heap, push_heap y pop_heap.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma tres parametros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Container = vector, c<strong>la</strong>ss Compare =<br />

less > c<strong>la</strong>ss priority_queue;<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

• Diseñado para que el primer elem<strong>en</strong>to sea siempre el más gran<strong>de</strong>.<br />

• Solo se pue<strong>de</strong> recuperar el elem<strong>en</strong>to con <strong>la</strong> prioridad mayor.<br />

• Para t<strong>en</strong>er <strong>la</strong> estructura <strong>de</strong> ord<strong>en</strong> interno <strong>de</strong> montículo se necesita t<strong>en</strong>er<br />

acceso aleatorio a los elem<strong>en</strong>tos.<br />

• El ord<strong>en</strong> se manti<strong>en</strong>e con los algoritmos make_heap, push_heap y pop_heap.<br />

• La implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma tres parametros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss T, c<strong>la</strong>ss Container = vector, c<strong>la</strong>ss Compare =<br />

less > c<strong>la</strong>ss priority_queue;<br />

• don<strong>de</strong> T es el tipo <strong>de</strong> elem<strong>en</strong>to,Container es el cont<strong>en</strong>edor <strong>de</strong> base y<br />

Compare es <strong>la</strong> c<strong>la</strong>se que implem<strong>en</strong>ta <strong>la</strong>s funciones que <strong>de</strong>terminan el ord<strong>en</strong>.<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

• No usan iteradores<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

• No usan iteradores<br />

• <strong>la</strong> función miembro pop() regresa el objeto prioritario mi<strong>en</strong>tras que top() solo<br />

regresa un apuntador hacia él.<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

• No usan iteradores<br />

• <strong>la</strong> función miembro pop() regresa el objeto prioritario mi<strong>en</strong>tras que top() solo<br />

regresa un apuntador hacia él.<br />

• Aplicaciones:<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

• No usan iteradores<br />

• <strong>la</strong> función miembro pop() regresa el objeto prioritario mi<strong>en</strong>tras que top() solo<br />

regresa un apuntador hacia él.<br />

• Aplicaciones:<br />

• tareas <strong>de</strong> un robot ord<strong>en</strong>adas por prioridad<br />

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


Adaptadores <strong>de</strong> cont<strong>en</strong>edores: priority_queue<br />

• No usan iteradores<br />

• <strong>la</strong> función miembro pop() regresa el objeto prioritario mi<strong>en</strong>tras que top() solo<br />

regresa un apuntador hacia él.<br />

• Aplicaciones:<br />

• tareas <strong>de</strong> un robot ord<strong>en</strong>adas por prioridad<br />

• paci<strong>en</strong>tes <strong>de</strong> un hospital.<br />

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


Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011


Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011


<strong>Cont<strong>en</strong>edores</strong> <strong>de</strong> bits<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>de</strong> bits<br />

• A veces se pue<strong>de</strong> necesitar manipu<strong>la</strong>r cont<strong>en</strong>edores <strong>de</strong> bits (elem<strong>en</strong>tos con<br />

solo dos valores posibles 0 o 1, true y false ...), particu<strong>la</strong>rm<strong>en</strong>te <strong>en</strong><br />

aplicaciones que ti<strong>en</strong><strong>en</strong> que ver con el hardware.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>de</strong> bits<br />

• A veces se pue<strong>de</strong> necesitar manipu<strong>la</strong>r cont<strong>en</strong>edores <strong>de</strong> bits (elem<strong>en</strong>tos con<br />

solo dos valores posibles 0 o 1, true y false ...), particu<strong>la</strong>rm<strong>en</strong>te <strong>en</strong><br />

aplicaciones que ti<strong>en</strong><strong>en</strong> que ver con el hardware.<br />

• La c<strong>la</strong>se es muy simi<strong>la</strong>r a un arreglo regu<strong>la</strong>r pero optimiza espacio para<br />

almac<strong>en</strong>ami<strong>en</strong>to <strong>de</strong> estos tipos <strong>de</strong> datos.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>de</strong> bits<br />

• A veces se pue<strong>de</strong> necesitar manipu<strong>la</strong>r cont<strong>en</strong>edores <strong>de</strong> bits (elem<strong>en</strong>tos con<br />

solo dos valores posibles 0 o 1, true y false ...), particu<strong>la</strong>rm<strong>en</strong>te <strong>en</strong><br />

aplicaciones que ti<strong>en</strong><strong>en</strong> que ver con el hardware.<br />

• La c<strong>la</strong>se es muy simi<strong>la</strong>r a un arreglo regu<strong>la</strong>r pero optimiza espacio para<br />

almac<strong>en</strong>ami<strong>en</strong>to <strong>de</strong> estos tipos <strong>de</strong> datos.<br />

• Exist<strong>en</strong> dos cont<strong>en</strong>edores adaptados a este caso:<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>de</strong> bits<br />

• A veces se pue<strong>de</strong> necesitar manipu<strong>la</strong>r cont<strong>en</strong>edores <strong>de</strong> bits (elem<strong>en</strong>tos con<br />

solo dos valores posibles 0 o 1, true y false ...), particu<strong>la</strong>rm<strong>en</strong>te <strong>en</strong><br />

aplicaciones que ti<strong>en</strong><strong>en</strong> que ver con el hardware.<br />

• La c<strong>la</strong>se es muy simi<strong>la</strong>r a un arreglo regu<strong>la</strong>r pero optimiza espacio para<br />

almac<strong>en</strong>ami<strong>en</strong>to <strong>de</strong> estos tipos <strong>de</strong> datos.<br />

• Exist<strong>en</strong> dos cont<strong>en</strong>edores adaptados a este caso:<br />

• bitset, patrón parametrizado por el número <strong>de</strong> bits a consi<strong>de</strong>rar<br />

(tamaño fijo), ejemplos <strong>de</strong> funciones: to_ulong , flip , etc.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>de</strong> bits<br />

• A veces se pue<strong>de</strong> necesitar manipu<strong>la</strong>r cont<strong>en</strong>edores <strong>de</strong> bits (elem<strong>en</strong>tos con<br />

solo dos valores posibles 0 o 1, true y false ...), particu<strong>la</strong>rm<strong>en</strong>te <strong>en</strong><br />

aplicaciones que ti<strong>en</strong><strong>en</strong> que ver con el hardware.<br />

• La c<strong>la</strong>se es muy simi<strong>la</strong>r a un arreglo regu<strong>la</strong>r pero optimiza espacio para<br />

almac<strong>en</strong>ami<strong>en</strong>to <strong>de</strong> estos tipos <strong>de</strong> datos.<br />

• Exist<strong>en</strong> dos cont<strong>en</strong>edores adaptados a este caso:<br />

• bitset, patrón parametrizado por el número <strong>de</strong> bits a consi<strong>de</strong>rar<br />

(tamaño fijo), ejemplos <strong>de</strong> funciones: to_ulong , flip , etc.<br />

• vector, implem<strong>en</strong>tación optimizada <strong>de</strong> un vector <strong>en</strong> el caso <strong>de</strong> bits.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong><br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 23


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong><br />

• Como su nombre lo indica, estos cont<strong>en</strong>edores asocian l<strong>la</strong>ves y valores <strong>en</strong><br />

una so<strong>la</strong> estructura.<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 23


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong><br />

• Como su nombre lo indica, estos cont<strong>en</strong>edores asocian l<strong>la</strong>ves y valores <strong>en</strong><br />

una so<strong>la</strong> estructura.<br />

• La i<strong>de</strong>a <strong>de</strong> po<strong>de</strong>r acce<strong>de</strong>r valores (objetos) a partir <strong>de</strong> <strong>la</strong> l<strong>la</strong>ve.<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 23


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong><br />

• Como su nombre lo indica, estos cont<strong>en</strong>edores asocian l<strong>la</strong>ves y valores <strong>en</strong><br />

una so<strong>la</strong> estructura.<br />

• La i<strong>de</strong>a <strong>de</strong> po<strong>de</strong>r acce<strong>de</strong>r valores (objetos) a partir <strong>de</strong> <strong>la</strong> l<strong>la</strong>ve.<br />

• set y multiset solo conti<strong>en</strong><strong>en</strong> valores ( <strong>en</strong> este caso son iguales que <strong>la</strong> l<strong>la</strong>ve )<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 23


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong><br />

• Como su nombre lo indica, estos cont<strong>en</strong>edores asocian l<strong>la</strong>ves y valores <strong>en</strong><br />

una so<strong>la</strong> estructura.<br />

• La i<strong>de</strong>a <strong>de</strong> po<strong>de</strong>r acce<strong>de</strong>r valores (objetos) a partir <strong>de</strong> <strong>la</strong> l<strong>la</strong>ve.<br />

• set y multiset solo conti<strong>en</strong><strong>en</strong> valores ( <strong>en</strong> este caso son iguales que <strong>la</strong> l<strong>la</strong>ve )<br />

• map y multimap realizan asociación l<strong>la</strong>ve,valor usando el mismo tipo <strong>de</strong><br />

estructuras.<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 23


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong><br />

• Como su nombre lo indica, estos cont<strong>en</strong>edores asocian l<strong>la</strong>ves y valores <strong>en</strong><br />

una so<strong>la</strong> estructura.<br />

• La i<strong>de</strong>a <strong>de</strong> po<strong>de</strong>r acce<strong>de</strong>r valores (objetos) a partir <strong>de</strong> <strong>la</strong> l<strong>la</strong>ve.<br />

• set y multiset solo conti<strong>en</strong><strong>en</strong> valores ( <strong>en</strong> este caso son iguales que <strong>la</strong> l<strong>la</strong>ve )<br />

• map y multimap realizan asociación l<strong>la</strong>ve,valor usando el mismo tipo <strong>de</strong><br />

estructuras.<br />

• La meta es<strong>en</strong>cial <strong>de</strong> estos cont<strong>en</strong>edores es probar <strong>de</strong> manera efici<strong>en</strong>te <strong>la</strong><br />

exist<strong>en</strong>cia <strong>de</strong> objetos: por ejemplo si una pa<strong>la</strong>bra está o no <strong>en</strong> el diccionario y si<br />

está cual es su <strong>de</strong>finición.<br />

Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011 23


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong><br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong><br />

• Los métodos comunes <strong>en</strong>tre ellos son:<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong><br />

• Los métodos comunes <strong>en</strong>tre ellos son:<br />

• insert( ) : agrega nuevos objetos si su l<strong>la</strong>ve no está ya <strong>en</strong> el cont<strong>en</strong>edor<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong><br />

• Los métodos comunes <strong>en</strong>tre ellos son:<br />

• insert( ) : agrega nuevos objetos si su l<strong>la</strong>ve no está ya <strong>en</strong> el cont<strong>en</strong>edor<br />

• count( ) : cu<strong>en</strong>ta el número <strong>de</strong> objetos que ti<strong>en</strong>e una l<strong>la</strong>ve dada ( 0 o 1 <strong>en</strong> el<br />

caso <strong>de</strong> set y map y un <strong>en</strong>tero positivo <strong>en</strong> el caso <strong>de</strong> multiset y multimap)<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong><br />

• Los métodos comunes <strong>en</strong>tre ellos son:<br />

• insert( ) : agrega nuevos objetos si su l<strong>la</strong>ve no está ya <strong>en</strong> el cont<strong>en</strong>edor<br />

• count( ) : cu<strong>en</strong>ta el número <strong>de</strong> objetos que ti<strong>en</strong>e una l<strong>la</strong>ve dada ( 0 o 1 <strong>en</strong> el<br />

caso <strong>de</strong> set y map y un <strong>en</strong>tero positivo <strong>en</strong> el caso <strong>de</strong> multiset y multimap)<br />

• find( ) : regresa un iterador sobre <strong>la</strong> posición <strong>en</strong> que se <strong>en</strong>cu<strong>en</strong>tra <strong>la</strong> primera<br />

l<strong>la</strong>ve dada o <strong>en</strong>d( ) si no.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Cont<strong>en</strong>edor asociativo que almac<strong>en</strong>a elem<strong>en</strong>tos únicos (<strong>la</strong>s l<strong>la</strong>ves)<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Cont<strong>en</strong>edor asociativo que almac<strong>en</strong>a elem<strong>en</strong>tos únicos (<strong>la</strong>s l<strong>la</strong>ves)<br />

• La i<strong>de</strong>a principal es <strong>de</strong>terminar rápidam<strong>en</strong>te una re<strong>la</strong>ción <strong>de</strong> membresia <strong>de</strong> un<br />

objeto con respecto al cont<strong>en</strong>edor (noción <strong>de</strong> conjunto matemático) .<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Cont<strong>en</strong>edor asociativo que almac<strong>en</strong>a elem<strong>en</strong>tos únicos (<strong>la</strong>s l<strong>la</strong>ves)<br />

• La i<strong>de</strong>a principal es <strong>de</strong>terminar rápidam<strong>en</strong>te una re<strong>la</strong>ción <strong>de</strong> membresia <strong>de</strong> un<br />

objeto con respecto al cont<strong>en</strong>edor (noción <strong>de</strong> conjunto matemático) .<br />

• La implem<strong>en</strong>tación más común usa árboles binarios <strong>de</strong> búsqueda auto-equilibrados y<br />

por construcción ord<strong>en</strong>a los datos.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Cont<strong>en</strong>edor asociativo que almac<strong>en</strong>a elem<strong>en</strong>tos únicos (<strong>la</strong>s l<strong>la</strong>ves)<br />

• La i<strong>de</strong>a principal es <strong>de</strong>terminar rápidam<strong>en</strong>te una re<strong>la</strong>ción <strong>de</strong> membresia <strong>de</strong> un<br />

objeto con respecto al cont<strong>en</strong>edor (noción <strong>de</strong> conjunto matemático) .<br />

• La implem<strong>en</strong>tación más común usa árboles binarios <strong>de</strong> búsqueda auto-equilibrados y<br />

por construcción ord<strong>en</strong>a los datos.<br />

• Los objetos ya no son nombrados por índice sino por su valor.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Cont<strong>en</strong>edor asociativo que almac<strong>en</strong>a elem<strong>en</strong>tos únicos (<strong>la</strong>s l<strong>la</strong>ves)<br />

• La i<strong>de</strong>a principal es <strong>de</strong>terminar rápidam<strong>en</strong>te una re<strong>la</strong>ción <strong>de</strong> membresia <strong>de</strong> un<br />

objeto con respecto al cont<strong>en</strong>edor (noción <strong>de</strong> conjunto matemático) .<br />

• La implem<strong>en</strong>tación más común usa árboles binarios <strong>de</strong> búsqueda auto-equilibrados y<br />

por construcción ord<strong>en</strong>a los datos.<br />

• Los objetos ya no son nombrados por índice sino por su valor.<br />

• Diseñados para acce<strong>de</strong>r los elem<strong>en</strong>tos por medio <strong>de</strong> su l<strong>la</strong>ve.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Cont<strong>en</strong>edor asociativo que almac<strong>en</strong>a elem<strong>en</strong>tos únicos (<strong>la</strong>s l<strong>la</strong>ves)<br />

• La i<strong>de</strong>a principal es <strong>de</strong>terminar rápidam<strong>en</strong>te una re<strong>la</strong>ción <strong>de</strong> membresia <strong>de</strong> un<br />

objeto con respecto al cont<strong>en</strong>edor (noción <strong>de</strong> conjunto matemático) .<br />

• La implem<strong>en</strong>tación más común usa árboles binarios <strong>de</strong> búsqueda auto-equilibrados y<br />

por construcción ord<strong>en</strong>a los datos.<br />

• Los objetos ya no son nombrados por índice sino por su valor.<br />

• Diseñados para acce<strong>de</strong>r los elem<strong>en</strong>tos por medio <strong>de</strong> su l<strong>la</strong>ve.<br />

• Es util <strong>en</strong> <strong>la</strong>s operaciones <strong>de</strong> unión, intersección, difer<strong>en</strong>cia, y prueba <strong>de</strong><br />

membresía.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Cont<strong>en</strong>edor asociativo que almac<strong>en</strong>a elem<strong>en</strong>tos únicos (<strong>la</strong>s l<strong>la</strong>ves)<br />

• La i<strong>de</strong>a principal es <strong>de</strong>terminar rápidam<strong>en</strong>te una re<strong>la</strong>ción <strong>de</strong> membresia <strong>de</strong> un<br />

objeto con respecto al cont<strong>en</strong>edor (noción <strong>de</strong> conjunto matemático) .<br />

• La implem<strong>en</strong>tación más común usa árboles binarios <strong>de</strong> búsqueda auto-equilibrados y<br />

por construcción ord<strong>en</strong>a los datos.<br />

• Los objetos ya no son nombrados por índice sino por su valor.<br />

• Diseñados para acce<strong>de</strong>r los elem<strong>en</strong>tos por medio <strong>de</strong> su l<strong>la</strong>ve.<br />

• Es util <strong>en</strong> <strong>la</strong>s operaciones <strong>de</strong> unión, intersección, difer<strong>en</strong>cia, y prueba <strong>de</strong><br />

membresía.<br />

• El tipo <strong>de</strong> dato <strong>de</strong>be implem<strong>en</strong>tar un operador <strong>de</strong> comparación.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Su implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma tres parámetros:<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Su implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma tres parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss Key, c<strong>la</strong>ss Compare = less, c<strong>la</strong>ss Allocator =<br />

allocator > c<strong>la</strong>ss set.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Su implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma tres parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss Key, c<strong>la</strong>ss Compare = less, c<strong>la</strong>ss Allocator =<br />

allocator > c<strong>la</strong>ss set.<br />

• don<strong>de</strong> Key es el tipo <strong>de</strong> elem<strong>en</strong>tos l<strong>la</strong>ve <strong>en</strong> el cont<strong>en</strong>edor. Cada elem<strong>en</strong>to <strong>en</strong> un<br />

conjunto es también su l<strong>la</strong>ve.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Su implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma tres parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss Key, c<strong>la</strong>ss Compare = less, c<strong>la</strong>ss Allocator =<br />

allocator > c<strong>la</strong>ss set.<br />

• don<strong>de</strong> Key es el tipo <strong>de</strong> elem<strong>en</strong>tos l<strong>la</strong>ve <strong>en</strong> el cont<strong>en</strong>edor. Cada elem<strong>en</strong>to <strong>en</strong> un<br />

conjunto es también su l<strong>la</strong>ve.<br />

• Compare es <strong>la</strong> función <strong>de</strong> comparación y regresa un bool.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Su implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma tres parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss Key, c<strong>la</strong>ss Compare = less, c<strong>la</strong>ss Allocator =<br />

allocator > c<strong>la</strong>ss set.<br />

• don<strong>de</strong> Key es el tipo <strong>de</strong> elem<strong>en</strong>tos l<strong>la</strong>ve <strong>en</strong> el cont<strong>en</strong>edor. Cada elem<strong>en</strong>to <strong>en</strong> un<br />

conjunto es también su l<strong>la</strong>ve.<br />

• Compare es <strong>la</strong> función <strong>de</strong> comparación y regresa un bool.<br />

• Allocator es el objeto para <strong>de</strong>finir el mo<strong>de</strong>lo <strong>de</strong> almac<strong>en</strong>ami<strong>en</strong>to.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Ejemplo: índice <strong>de</strong> un libro<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Ejemplo: índice <strong>de</strong> un libro<br />

• leer el texto <strong>de</strong>l libro<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Ejemplo: índice <strong>de</strong> un libro<br />

• leer el texto <strong>de</strong>l libro<br />

• para cada pa<strong>la</strong>bra <strong>en</strong>contrada, int<strong>en</strong>tar añadir<strong>la</strong> <strong>en</strong> el set<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Ejemplo: índice <strong>de</strong> un libro<br />

• leer el texto <strong>de</strong>l libro<br />

• para cada pa<strong>la</strong>bra <strong>en</strong>contrada, int<strong>en</strong>tar añadir<strong>la</strong> <strong>en</strong> el set<br />

• si ya está, <strong>de</strong>jar<strong>la</strong><br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

• Ejemplo: índice <strong>de</strong> un libro<br />

• leer el texto <strong>de</strong>l libro<br />

• para cada pa<strong>la</strong>bra <strong>en</strong>contrada, int<strong>en</strong>tar añadir<strong>la</strong> <strong>en</strong> el set<br />

• si ya está, <strong>de</strong>jar<strong>la</strong><br />

• si no está, añadir<strong>la</strong> al set <strong>de</strong> tal manera que el conjunto que<strong>de</strong><br />

ord<strong>en</strong>ado y el árbol subyac<strong>en</strong>te esté equilibrado.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: set<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: multiset<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: multiset<br />

• El cont<strong>en</strong>edor multiset ti<strong>en</strong>e <strong>la</strong> propiedad <strong>de</strong> po<strong>de</strong>r almac<strong>en</strong>ar varios<br />

elem<strong>en</strong>tos con <strong>la</strong> misma l<strong>la</strong>ve.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: multiset<br />

• El cont<strong>en</strong>edor multiset ti<strong>en</strong>e <strong>la</strong> propiedad <strong>de</strong> po<strong>de</strong>r almac<strong>en</strong>ar varios<br />

elem<strong>en</strong>tos con <strong>la</strong> misma l<strong>la</strong>ve.<br />

• Su implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma tres parámetros<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: multiset<br />

• El cont<strong>en</strong>edor multiset ti<strong>en</strong>e <strong>la</strong> propiedad <strong>de</strong> po<strong>de</strong>r almac<strong>en</strong>ar varios<br />

elem<strong>en</strong>tos con <strong>la</strong> misma l<strong>la</strong>ve.<br />

• Su implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toma tres parámetros<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss key, c<strong>la</strong>ss Compare = less, c<strong>la</strong>ss<br />

Allocator=allocator > c<strong>la</strong>ss multiset;<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: multiset<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: multiset<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• <strong>Cont<strong>en</strong>edores</strong> formados <strong>de</strong> <strong>la</strong> combinación l<strong>la</strong>ve y valor.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• <strong>Cont<strong>en</strong>edores</strong> formados <strong>de</strong> <strong>la</strong> combinación l<strong>la</strong>ve y valor.<br />

• La l<strong>la</strong>ve se usa para id<strong>en</strong>tificar <strong>de</strong> manera única al elem<strong>en</strong>to mi<strong>en</strong>tras que el<br />

valor mapeado está asociado a <strong>la</strong> l<strong>la</strong>ve.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• <strong>Cont<strong>en</strong>edores</strong> formados <strong>de</strong> <strong>la</strong> combinación l<strong>la</strong>ve y valor.<br />

• La l<strong>la</strong>ve se usa para id<strong>en</strong>tificar <strong>de</strong> manera única al elem<strong>en</strong>to mi<strong>en</strong>tras que el<br />

valor mapeado está asociado a <strong>la</strong> l<strong>la</strong>ve.<br />

• Un ejemplo típico <strong>de</strong> un map es <strong>la</strong> guía telefónica don<strong>de</strong> el nombre es <strong>la</strong> l<strong>la</strong>ve<br />

y el número telefónico es el valor mapeado.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• <strong>Cont<strong>en</strong>edores</strong> formados <strong>de</strong> <strong>la</strong> combinación l<strong>la</strong>ve y valor.<br />

• La l<strong>la</strong>ve se usa para id<strong>en</strong>tificar <strong>de</strong> manera única al elem<strong>en</strong>to mi<strong>en</strong>tras que el<br />

valor mapeado está asociado a <strong>la</strong> l<strong>la</strong>ve.<br />

• Un ejemplo típico <strong>de</strong> un map es <strong>la</strong> guía telefónica don<strong>de</strong> el nombre es <strong>la</strong> l<strong>la</strong>ve<br />

y el número telefónico es el valor mapeado.<br />

• Internam<strong>en</strong>te los elem<strong>en</strong>tos <strong>de</strong>l mapa están ord<strong>en</strong>ados <strong>de</strong> m<strong>en</strong>or a mayor<br />

valor <strong>de</strong> l<strong>la</strong>ve.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• <strong>Cont<strong>en</strong>edores</strong> formados <strong>de</strong> <strong>la</strong> combinación l<strong>la</strong>ve y valor.<br />

• La l<strong>la</strong>ve se usa para id<strong>en</strong>tificar <strong>de</strong> manera única al elem<strong>en</strong>to mi<strong>en</strong>tras que el<br />

valor mapeado está asociado a <strong>la</strong> l<strong>la</strong>ve.<br />

• Un ejemplo típico <strong>de</strong> un map es <strong>la</strong> guía telefónica don<strong>de</strong> el nombre es <strong>la</strong> l<strong>la</strong>ve<br />

y el número telefónico es el valor mapeado.<br />

• Internam<strong>en</strong>te los elem<strong>en</strong>tos <strong>de</strong>l mapa están ord<strong>en</strong>ados <strong>de</strong> m<strong>en</strong>or a mayor<br />

valor <strong>de</strong> l<strong>la</strong>ve.<br />

• Están diseñados para ser efici<strong>en</strong>tes obt<strong>en</strong>i<strong>en</strong>do sus elem<strong>en</strong>tos por una l<strong>la</strong>ve.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• <strong>Cont<strong>en</strong>edores</strong> formados <strong>de</strong> <strong>la</strong> combinación l<strong>la</strong>ve y valor.<br />

• La l<strong>la</strong>ve se usa para id<strong>en</strong>tificar <strong>de</strong> manera única al elem<strong>en</strong>to mi<strong>en</strong>tras que el<br />

valor mapeado está asociado a <strong>la</strong> l<strong>la</strong>ve.<br />

• Un ejemplo típico <strong>de</strong> un map es <strong>la</strong> guía telefónica don<strong>de</strong> el nombre es <strong>la</strong> l<strong>la</strong>ve<br />

y el número telefónico es el valor mapeado.<br />

• Internam<strong>en</strong>te los elem<strong>en</strong>tos <strong>de</strong>l mapa están ord<strong>en</strong>ados <strong>de</strong> m<strong>en</strong>or a mayor<br />

valor <strong>de</strong> l<strong>la</strong>ve.<br />

• Están diseñados para ser efici<strong>en</strong>tes obt<strong>en</strong>i<strong>en</strong>do sus elem<strong>en</strong>tos por una l<strong>la</strong>ve.<br />

• Están implem<strong>en</strong>tados con árboles binarios <strong>de</strong> búsqueda auto-equilibrados.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• Las características principales <strong>de</strong> map son:<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• Las características principales <strong>de</strong> map son:<br />

• Valores únicos <strong>de</strong> l<strong>la</strong>ve: dos elem<strong>en</strong>tos no pued<strong>en</strong> t<strong>en</strong>er <strong>la</strong> misma l<strong>la</strong>ve.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• Las características principales <strong>de</strong> map son:<br />

• Valores únicos <strong>de</strong> l<strong>la</strong>ve: dos elem<strong>en</strong>tos no pued<strong>en</strong> t<strong>en</strong>er <strong>la</strong> misma l<strong>la</strong>ve.<br />

• Cada elem<strong>en</strong>to se compone por un par (l<strong>la</strong>ve,valor).<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• Las características principales <strong>de</strong> map son:<br />

• Valores únicos <strong>de</strong> l<strong>la</strong>ve: dos elem<strong>en</strong>tos no pued<strong>en</strong> t<strong>en</strong>er <strong>la</strong> misma l<strong>la</strong>ve.<br />

• Cada elem<strong>en</strong>to se compone por un par (l<strong>la</strong>ve,valor).<br />

• Los elem<strong>en</strong>tos sigu<strong>en</strong> una re<strong>la</strong>ción <strong>de</strong> ord<strong>en</strong> <strong>en</strong> todo mom<strong>en</strong>to.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• Las características principales <strong>de</strong> map son:<br />

• Valores únicos <strong>de</strong> l<strong>la</strong>ve: dos elem<strong>en</strong>tos no pued<strong>en</strong> t<strong>en</strong>er <strong>la</strong> misma l<strong>la</strong>ve.<br />

• Cada elem<strong>en</strong>to se compone por un par (l<strong>la</strong>ve,valor).<br />

• Los elem<strong>en</strong>tos sigu<strong>en</strong> una re<strong>la</strong>ción <strong>de</strong> ord<strong>en</strong> <strong>en</strong> todo mom<strong>en</strong>to.<br />

• En su implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toman 4 parámetros:<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• Las características principales <strong>de</strong> map son:<br />

• Valores únicos <strong>de</strong> l<strong>la</strong>ve: dos elem<strong>en</strong>tos no pued<strong>en</strong> t<strong>en</strong>er <strong>la</strong> misma l<strong>la</strong>ve.<br />

• Cada elem<strong>en</strong>to se compone por un par (l<strong>la</strong>ve,valor).<br />

• Los elem<strong>en</strong>tos sigu<strong>en</strong> una re<strong>la</strong>ción <strong>de</strong> ord<strong>en</strong> <strong>en</strong> todo mom<strong>en</strong>to.<br />

• En su implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toman 4 parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss Key, c<strong>la</strong>ss T, c<strong>la</strong>ss Compare=less, c<strong>la</strong>ss<br />

Allocator=allocator c<strong>la</strong>ss map;<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• Las características principales <strong>de</strong> map son:<br />

• Valores únicos <strong>de</strong> l<strong>la</strong>ve: dos elem<strong>en</strong>tos no pued<strong>en</strong> t<strong>en</strong>er <strong>la</strong> misma l<strong>la</strong>ve.<br />

• Cada elem<strong>en</strong>to se compone por un par (l<strong>la</strong>ve,valor).<br />

• Los elem<strong>en</strong>tos sigu<strong>en</strong> una re<strong>la</strong>ción <strong>de</strong> ord<strong>en</strong> <strong>en</strong> todo mom<strong>en</strong>to.<br />

• En su implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toman 4 parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss Key, c<strong>la</strong>ss T, c<strong>la</strong>ss Compare=less, c<strong>la</strong>ss<br />

Allocator=allocator c<strong>la</strong>ss map;<br />

• don<strong>de</strong> Key es el tipo <strong>de</strong> valores <strong>de</strong> l<strong>la</strong>ve, T es el tipo <strong>de</strong> valor mapeado.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

• Las características principales <strong>de</strong> map son:<br />

• Valores únicos <strong>de</strong> l<strong>la</strong>ve: dos elem<strong>en</strong>tos no pued<strong>en</strong> t<strong>en</strong>er <strong>la</strong> misma l<strong>la</strong>ve.<br />

• Cada elem<strong>en</strong>to se compone por un par (l<strong>la</strong>ve,valor).<br />

• Los elem<strong>en</strong>tos sigu<strong>en</strong> una re<strong>la</strong>ción <strong>de</strong> ord<strong>en</strong> <strong>en</strong> todo mom<strong>en</strong>to.<br />

• En su implem<strong>en</strong>tación <strong>en</strong> <strong>C++</strong> toman 4 parámetros:<br />

• temp<strong>la</strong>te < c<strong>la</strong>ss Key, c<strong>la</strong>ss T, c<strong>la</strong>ss Compare=less, c<strong>la</strong>ss<br />

Allocator=allocator c<strong>la</strong>ss map;<br />

• don<strong>de</strong> Key es el tipo <strong>de</strong> valores <strong>de</strong> l<strong>la</strong>ve, T es el tipo <strong>de</strong> valor mapeado.<br />

• Compare es <strong>la</strong> c<strong>la</strong>se <strong>de</strong> comparación y Allocator es el mo<strong>de</strong>lo <strong>de</strong><br />

almac<strong>en</strong>ami<strong>en</strong>to.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: map<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: multimap<br />

• Igual a un map pero soporta l<strong>la</strong>ves duplicadas.<br />

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


Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: ext<strong>en</strong>siones<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: ext<strong>en</strong>siones<br />

• De manera simi<strong>la</strong>r a set, multiset, map o multimap, se implem<strong>en</strong>taron<br />

hash_set, hash_multiset, hash_map y hash_multimap con tab<strong>la</strong>s <strong>de</strong> hash.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: ext<strong>en</strong>siones<br />

• De manera simi<strong>la</strong>r a set, multiset, map o multimap, se implem<strong>en</strong>taron<br />

hash_set, hash_multiset, hash_map y hash_multimap con tab<strong>la</strong>s <strong>de</strong> hash.<br />

• En este caso <strong>la</strong>s l<strong>la</strong>ves no están ord<strong>en</strong>adas pero <strong>de</strong>be existir una función <strong>de</strong><br />

hash para cada tipo <strong>de</strong> l<strong>la</strong>ve.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: ext<strong>en</strong>siones<br />

• De manera simi<strong>la</strong>r a set, multiset, map o multimap, se implem<strong>en</strong>taron<br />

hash_set, hash_multiset, hash_map y hash_multimap con tab<strong>la</strong>s <strong>de</strong> hash.<br />

• En este caso <strong>la</strong>s l<strong>la</strong>ves no están ord<strong>en</strong>adas pero <strong>de</strong>be existir una función <strong>de</strong><br />

hash para cada tipo <strong>de</strong> l<strong>la</strong>ve.<br />

• Estos cont<strong>en</strong>edores no son parte <strong>de</strong> <strong>la</strong> librería estándar <strong>de</strong> <strong>C++</strong> pero están<br />

incluidos <strong>en</strong> <strong>la</strong>s ext<strong>en</strong>siones <strong>de</strong> <strong>STL</strong> <strong>de</strong> SGI y también <strong>en</strong> librerías muy<br />

usadas tales como <strong>la</strong> GNU <strong>C++</strong> Library usando el __gnu_cxx namespace.<br />

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


<strong>Cont<strong>en</strong>edores</strong> <strong>asociativos</strong>: ext<strong>en</strong>siones<br />

• De manera simi<strong>la</strong>r a set, multiset, map o multimap, se implem<strong>en</strong>taron<br />

hash_set, hash_multiset, hash_map y hash_multimap con tab<strong>la</strong>s <strong>de</strong> hash.<br />

• En este caso <strong>la</strong>s l<strong>la</strong>ves no están ord<strong>en</strong>adas pero <strong>de</strong>be existir una función <strong>de</strong><br />

hash para cada tipo <strong>de</strong> l<strong>la</strong>ve.<br />

• Estos cont<strong>en</strong>edores no son parte <strong>de</strong> <strong>la</strong> librería estándar <strong>de</strong> <strong>C++</strong> pero están<br />

incluidos <strong>en</strong> <strong>la</strong>s ext<strong>en</strong>siones <strong>de</strong> <strong>STL</strong> <strong>de</strong> SGI y también <strong>en</strong> librerías muy<br />

usadas tales como <strong>la</strong> GNU <strong>C++</strong> Library usando el __gnu_cxx namespace.<br />

• Se espera que sean agregadas <strong>en</strong> <strong>la</strong> <strong>STL</strong> con los nombres <strong>de</strong> unor<strong>de</strong>red_set,<br />

unor<strong>de</strong>red_multiset, unor<strong>de</strong>red_map y unor<strong>de</strong>red_multimap.<br />

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


Alonso Ramírez Manzanares Computación y Algoritmos 26.04.2011


Refer<strong>en</strong>cias<br />

• Thinking in <strong>C++</strong> Vol. 1. Eckel, Bruce.<br />

• http://www.cplusplus.com/refer<strong>en</strong>ce/stl<br />

• http://www.java2s.com/Co<strong>de</strong>/Cpp/CatalogCpp.htm<br />

• http://www.mochima.com/tutorials/<strong>STL</strong>.html<br />

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

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!