Contenedores asociativos en la STL de C++ - Cimat
Contenedores asociativos en la STL de C++ - Cimat
Contenedores asociativos en la STL de C++ - Cimat
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