Cómo Usar los
Contenedores de STL
 Basados en Árboles
     Apoyo SSD5
Conjuntos

El contenedor set de STL almacena
elementos únicos en un conjunto
ordenado.
Las tareas de adición, eliminación ...
Conjuntos
Insertar elementos con un criterio de
ordenación no degradará estas
operaciones a tiempo lineal, como es el
caso...
Conjuntos
Un programador especifica el tipo de dato
que el conjunto puede contener como un
parámetro plantilla (template)....
Conjuntos
Agregar elementos a un set se realiza
usando la función miembro insert.
La función miembro size regresa el
númer...
Conjuntos
La función find busca un elemento
dentro de set.
Esta función regresa un iterador al
elemento encontrado.
Si el ...
set<int> s1;
set<int> s2;
for (int i = 0; i < 20; i++) {
    s1.insert(i);
    s2.insert(30 - i);
}
cout << quot;size of s...
Conjuntos
Cuatro de los algoritmos genéricos de STL
están diseñados específicamente para
usarse con conjuntos.
Estas son l...
Es importante entender que estas cuatro
funciones también pueden ser usadas con
otros contenedores de STL (como vectors
y ...
ostream_iterator<int>
 out(cout, quot; quot;);
// Set intersection
cout << quot;nset intersection: quot;;
set_intersection...
Mapas
Mapas
El contenedor map de STL es una
estructura asociativa que almacena datos
en pares de valor-llave.
El contenedor map ...
Mapas
Declarar un objeto de tipo map involucra
especificar el tipo de dato, tanto de la llave
como del valor.
La llave se ...
Mapas
Por ejemplo, el siguiente listado declara
dos objetos map.
El primero es un mapa de tipo string a
string.
El segundo...
Mapas
// A map of strings to
   stringsmap<string, string> m1;
// A map of strings to
   intsmap<string, int> m2;




    ...
Mapas
Para insertar elementos en un mapa se
requiere tanto la llave como el valor.
El siguiente listado inserta dos pares
...
// A map of strings to string
smap<string, string> m1;
// A map of strings to int
smap<string, int> m2;

m1.insert(pair<st...
Mapas
 Un mecanismo alternativo para agregar
 elementos a un mapa es el operador
 sobrecargado de doble corchete.
 El sigu...
Mapas
De manera similar al contenedor set, el
contenedor map ofrece las funciones
miembro size, find, y count.
Un programa...
Mapas
La implantación de la iteración de un
mapa autoriza la examinación, debido a
que es ligeramente más compleja que la
...
map<string, string>::iterator it =
 m1.begin();
for ( ; it != m1.end(); it++) {
       cout << it->first << quot;: quot; <...
Mapas
El listado anterior itera a través de los
elementos del objeto del mapa m1.
El aspecto importante a notar es cómo
so...
Mapas
Para acceder a la llave de un elemento a
través de un iterador, se debe
dereferenciar el iterador y luego usar el
mi...
Colas de Prioridad
Colas de Prioridad
El adaptador de STL priority_queue
brinda a los programadores una interfaz
más conveniente para una col...
Colas de Prioridad
Las colas de prioridad, por lo tanto,
permiten el acceso solamente al elemento
con la prioridad más alt...
#include <iostream>#include
  <cstdlib>#include <queue>using namespace
  std;int main(int argc, char* argv[]) {
    priori...
Colas de Prioridad
El adaptador priority_queue requiere
algunos mecanismos para determinar la
prioridad relativa de elemen...
Colas de Prioridad
Existe un mecanismo alternativo que un
programador puede implantar para usar
una priority_queue con obj...
Colas de Prioridad
Esta función comparativa dicta cómo el
adaptador priority_queue debe
determinar la prioridad de los ele...
#include <iostream>
#include <cstdlib>
#include <string>
#include <queue>
using namespace std;
class StringCompare {
publi...
int main(int argc, char* argv[]) {
// Create a priority queue that assigns longer
// strings a higher priority.
    priori...
Proveer una función comparativa a un
priority_queue es también ventajoso
cuando un operador < existente no es
apropiado pa...
Upcoming SlideShare
Loading in …5
×

19 Contenedores De Stl Basados En Arboles

1,850 views
1,775 views

Published on

Published in: Technology, Business
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,850
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
21
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

19 Contenedores De Stl Basados En Arboles

  1. 1. Cómo Usar los Contenedores de STL Basados en Árboles Apoyo SSD5
  2. 2. Conjuntos El contenedor set de STL almacena elementos únicos en un conjunto ordenado. Las tareas de adición, eliminación y acceso de elementos están garantizadas por el estándar de STL para tomar un tiempo logarítmico en un set. Mtl Lourdes Cahuich 2
  3. 3. Conjuntos Insertar elementos con un criterio de ordenación no degradará estas operaciones a tiempo lineal, como es el caso de los árboles binarios de búsqueda. Declarar objetos de la clase set es similar a declarar otros contenedores de STL. Mtl Lourdes Cahuich 3
  4. 4. Conjuntos Un programador especifica el tipo de dato que el conjunto puede contener como un parámetro plantilla (template). Para acceder al contenedor set, un programador debe incluir la biblioteca <set>. Mtl Lourdes Cahuich 4
  5. 5. Conjuntos Agregar elementos a un set se realiza usando la función miembro insert. La función miembro size regresa el número de elementos almacenados en el conjunto Mtl Lourdes Cahuich 5
  6. 6. Conjuntos La función find busca un elemento dentro de set. Esta función regresa un iterador al elemento encontrado. Si el elemento no es encontrado, la función find regresa un iterador igual al iterador regresado por la función end. Mtl Lourdes Cahuich 6
  7. 7. set<int> s1; set<int> s2; for (int i = 0; i < 20; i++) { s1.insert(i); s2.insert(30 - i); } cout << quot;size of s1: quot; << s1.size() << endl; cout << quot;size of s2: quot; << s2.size() << endl; if (s1.find(10) != s1.end()) { cout << quot;s1 contains 10nquot;; } Mtl Lourdes Cahuich 7
  8. 8. Conjuntos Cuatro de los algoritmos genéricos de STL están diseñados específicamente para usarse con conjuntos. Estas son las funciones set_intersection, set_union, set_difference, y set_symmetric_difference Mtl Lourdes Cahuich 8
  9. 9. Es importante entender que estas cuatro funciones también pueden ser usadas con otros contenedores de STL (como vectors y deques). Sin embargo, son más eficientes al usarse en conjuntos. Mtl Lourdes Cahuich 9
  10. 10. ostream_iterator<int> out(cout, quot; quot;); // Set intersection cout << quot;nset intersection: quot;; set_intersection(s1.begin(), s1.end(), s2.begin(), s2.end(), out); // Set union cout << quot;nset union: quot;; set_union(s1.begin(), s1.end(), s2.begin(), s2.end(), out); // Set difference cout << quot;nset difference: quot;; set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), out); // Set symmetric difference cout << quot;nset symmetric difference: quot;; set_symmetric_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), out); Mtl Lourdes Cahuich 10
  11. 11. Mapas
  12. 12. Mapas El contenedor map de STL es una estructura asociativa que almacena datos en pares de valor-llave. El contenedor map es considerado asociativo, debido a que mapea, o asocia, una pieza de datos (una llave) con otra pieza de datos (un valor) Mtl Lourdes Cahuich 12
  13. 13. Mapas Declarar un objeto de tipo map involucra especificar el tipo de dato, tanto de la llave como del valor. La llave se especifica con el primer parámetro plantilla, y el valor se especifica con un segundo parámetro plantilla Mtl Lourdes Cahuich 13
  14. 14. Mapas Por ejemplo, el siguiente listado declara dos objetos map. El primero es un mapa de tipo string a string. El segundo es un mapa de tipo string a int. Mtl Lourdes Cahuich 14
  15. 15. Mapas // A map of strings to stringsmap<string, string> m1; // A map of strings to intsmap<string, int> m2; Mtl Lourdes Cahuich 15
  16. 16. Mapas Para insertar elementos en un mapa se requiere tanto la llave como el valor. El siguiente listado inserta dos pares valor-llave en un mapa. Mtl Lourdes Cahuich 16
  17. 17. // A map of strings to string smap<string, string> m1; // A map of strings to int smap<string, int> m2; m1.insert(pair<string, string>(quot;applequot;, quot;a small red fruitquot;)); m1.insert(pair<string, string>(quot;orangequot;, quot;a small orange fruitquot;)); Mtl Lourdes Cahuich 17
  18. 18. Mapas Un mecanismo alternativo para agregar elementos a un mapa es el operador sobrecargado de doble corchete. El siguiente listado usa este operador para insertar un elemento en el mapa. m1[quot;bananaquot;] = quot;a long yellow fruitquot;; Mtl Lourdes Cahuich 18
  19. 19. Mapas De manera similar al contenedor set, el contenedor map ofrece las funciones miembro size, find, y count. Un programador también puede iterar a través de los elementos almacenados en un mapa. Mtl Lourdes Cahuich 19
  20. 20. Mapas La implantación de la iteración de un mapa autoriza la examinación, debido a que es ligeramente más compleja que la iteración estándar del contenedor. Mtl Lourdes Cahuich 20
  21. 21. map<string, string>::iterator it = m1.begin(); for ( ; it != m1.end(); it++) { cout << it->first << quot;: quot; << it->second << endl; } Mtl Lourdes Cahuich 21
  22. 22. Mapas El listado anterior itera a través de los elementos del objeto del mapa m1. El aspecto importante a notar es cómo son accedidos la llave y el valor de cada objeto. Internamente, un mapa almacena la llave y el valor para cada elemento de los datos, en un objeto de tipo pair<key, value>. Mtl Lourdes Cahuich 22
  23. 23. Mapas Para acceder a la llave de un elemento a través de un iterador, se debe dereferenciar el iterador y luego usar el miembro de los datos first del objeto pair. El miembro de los datos second brinda acceso al valor Mtl Lourdes Cahuich 23
  24. 24. Colas de Prioridad
  25. 25. Colas de Prioridad El adaptador de STL priority_queue brinda a los programadores una interfaz más conveniente para una cola de prioridad. Como el nombre sugiere, las colas de prioridad se comportan de forma similar a las colas regulares Mtl Lourdes Cahuich 25
  26. 26. Colas de Prioridad Las colas de prioridad, por lo tanto, permiten el acceso solamente al elemento con la prioridad más alta. Mtl Lourdes Cahuich 26
  27. 27. #include <iostream>#include <cstdlib>#include <queue>using namespace std;int main(int argc, char* argv[]) { priority_queue<int> pq; pq.push(1); pq.push(4); pq.push(2); cout << pq.top() << endl; // outputs '4‘ pq.pop(); cout << pq.top() << endl; // outputs '2‘ pq.pop(); cout << pq.top() << endl; // outputs '1‘ cout << pq.size() << endl; // outputs '1‘ return EXIT_SUCCESS; Mtl Lourdes Cahuich 27 }
  28. 28. Colas de Prioridad El adaptador priority_queue requiere algunos mecanismos para determinar la prioridad relativa de elementos. Por default, el adaptador priority_queue usa el operador < de los elementos, para determinar prioridad Mtl Lourdes Cahuich 28
  29. 29. Colas de Prioridad Existe un mecanismo alternativo que un programador puede implantar para usar una priority_queue con objetos que no proveen un operador <. Este mecanismo involucra proveer al adaptador priority_queue con una función comparativa. Mtl Lourdes Cahuich 29
  30. 30. Colas de Prioridad Esta función comparativa dicta cómo el adaptador priority_queue debe determinar la prioridad de los elementos almacenados Mtl Lourdes Cahuich 30
  31. 31. #include <iostream> #include <cstdlib> #include <string> #include <queue> using namespace std; class StringCompare { public: bool operator()(const string& s1, const string& s2) { if (s1.length() < s2.length()) { return true; } else { return false; } } }; Mtl Lourdes Cahuich 31
  32. 32. int main(int argc, char* argv[]) { // Create a priority queue that assigns longer // strings a higher priority. priority_queue<string, vector<string>,StringCompare> pq; pq.push(quot;small stringquot;); pq.push(quot;a slightly longer stringquot;); pq.push(quot;another small stringquot;); cout << pq.top() << endl; pq.pop(); cout << pq.top() << endl; pq.pop(); cout << pq.top() << endl; return EXIT_SUCCESS; } Mtl Lourdes Cahuich 32
  33. 33. Proveer una función comparativa a un priority_queue es también ventajoso cuando un operador < existente no es apropiado para su uso en la determinación de prioridades Si el listado no provee la función comparativa definida-por-el-usuario, la cola de prioridad podría usar el operador <. Esto podría causar que el programa asigne la prioridad más alta a la cadena de caracteres que alfabéticamente precede a las otras cadenas. Mtl Lourdes Cahuich 33

×