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. 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. 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. 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. 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. 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. 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. 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
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. 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. 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. Mapas
// A map of strings to
stringsmap<string, string> m1;
// A map of strings to
intsmap<string, int> m2;
Mtl Lourdes Cahuich 15
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. // 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. 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. 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. 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. 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. 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. 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
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. 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
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. 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. 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
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