mapas - ¿Qué es un "conjunto" en C++? ¿Cuándo son útiles?
tree set c++ (8)
¿Qué son?
Un conjunto es una colección.
Un conjunto es como un diccionario o ''mapa'' de pares clave / valor, excepto que solo almacena (es una colección de) claves sin valores asociados.
Un conjunto contiene o no una instancia de cada valor de clave posible. Por ejemplo, un conjunto de enteros puede contener los valores {0, 1, 5}. Un valor (por ejemplo, 5) no puede contenerse más de una vez en el conjunto (si llama al método de inserción del conjunto más de una vez para un valor clave dado, el conjunto solo contendrá una sola instancia de ese valor clave).
¿Cómo son útiles?
No los uso casi tan a menudo como los mapas.
Una vez que uso un conjunto es si soy una biblioteca que proporciona punteros que un cliente usa como identificador. Mantendré un conjunto privado que contiene todos los valores válidos del identificador que he creado. Cuando el cliente me da un identificador, probaré si el identificador es válido, probando si ese valor está contenido en mi conjunto.
Me está costando conceptualizar conjuntos de C ++, en realidad establece en general.
¿Qué son? ¿Cómo son útiles?
"Conjunto" es un tipo de colección que almacena objetos múltiples pero únicos. Es útil cuando quiere recolectar objetos pero no le importa su orden o cuántas veces el mismo objeto se encuentra en él.
Consulte esto para obtener más detalles: establecer en C ++
C ++ STL Sets son asignaciones asociativas que garantizan tanto la clasificación como la unicidad de los elementos dentro del conjunto (Multisets garantiza lo primero pero no lo último).
Por lo general, se usan como parte de operaciones establecidas: cosas como uniones, intersecciones y otras interacciones que involucran la inclusión / exclusión de elementos dentro de un conjunto.
El set
STL es un árbol rojo-negro (al menos así es como creo que se implementa)
Otra forma de verlo.
De ahí las propiedades, la búsqueda rápida de elementos, el ordenamiento de elementos, la unicidad del elemento, el recorrido ordenado, etc.
Es útil cuando desea realizar un seguimiento de elementos únicos como, por ejemplo, la lista de cadenas exclusivas o enteros, pero también puede almacenar estructuras más complicadas.
No te sientas mal si tienes problemas para entender los conjuntos en general. La mayoría de un título en matemáticas se emplea para llegar a un acuerdo con la teoría de conjuntos:
http://en.wikipedia.org/wiki/Set_theory
Piense en un conjunto como una colección de objetos únicos y sin orden. En muchos sentidos, parece una lista:
{1, 2, 3, 4}
pero el orden no es importante:
{4, 3, 2, 1} = {1, 2, 3, 4}
y las repeticiones son ignoradas:
{1, 1, 2, 3, 4} = {1, 2, 3, 4}
Un conjunto de C ++ es una implementación de este objeto matemático, con la característica impar que se ordena internamente. Pero esto es solo un detalle de la implementación, y no es relevante para comprender la estructura de datos. La clasificación es solo por velocidad.
Para una implementación desordenada de conjuntos en C ++, consulte Boost.Unordered . En muchos casos, esta es una mejor opción que el conjunto de STL, que personalmente uso más o menos solo para construir una lista ordenada de forma incremental.
Los conjuntos "en general" son un concepto (muy fundamental) en matemáticas.
El set
de STL se basa en el concepto matemático de un conjunto: es una colección de miembros únicos, o un "contenedor asociativo único" en la terminología de STL. Lo único extraño es que ordena elementos (en un conjunto matemático, no hay "orden" para los elementos).
Algunas implementaciones de STL también admiten un hash_set
, que es muy similar al set
, ya que también es análogo al concepto matemático de un conjunto. Las grandes diferencias entre set y hash_set
son que hash_sets no clasifican sus elementos, tienen diferentes características de rendimiento (O (1) en lugar de O (log n) búsquedas, asumiendo una buena función hash), y por supuesto no lo son. t estándar.
Un conjunto es una colección de objetos distintos, considerado como un objeto en sí mismo. Los conjuntos son uno de los conceptos más fundamentales en matemáticas. Aunque se inventó a fines del siglo XIX, la teoría de conjuntos ahora es una parte omnipresente de las matemáticas, y se puede utilizar como base desde la cual se pueden derivar casi todas las matemáticas.