Compartir a través de


multiset (Clase)

La clase multiset de la Biblioteca de plantillas estándar se emplea para el almacenamiento y la recuperación de datos de una colección en la que los valores de los elementos contenidos no tienen por qué ser únicos y en la que actúan como valores de clave según los cuales los datos se ordenan automáticamente. El valor de clave de un elemento de un multiset no se puede cambiar directamente. En su lugar, se deben eliminar los valores anteriores e insertar elementos con valores nuevos.

template < 
   class Key,  
   class Compare=less<Key>,  
   class Allocator=allocator<Key>  
> 
class multiset

Parámetros

  • Key
    Tipo de datos de elemento que se va a almacenar en la clase multiset.

  • Comparar
    Tipo que proporciona un objeto de función que puede comparar dos valores de elementos como claves de ordenación para determinar su orden relativo en la clase multiset. El predicado binario less<Key> es el valor predeterminado.

  • Allocator
    Tipo que representa el objeto de asignador almacenado que encapsula los detalles acerca de la asignación y desasignación de memoria de la clase multiset. El valor predeterminado es allocator*<Key>.*

Comentarios

La clase multiset de STL es:

  • Un contenedor asociativo de tamaño variable que admite la recuperación eficaz de valores de elemento según un valor de clave asociado.

  • Reversible, porque proporciona iteradores bidireccionales para tener acceso a sus elementos.

  • Ordenada, porque sus elementos se ordenan según los valores de clave dentro del contenedor de acuerdo con una función de comparación especificada.

  • Múltiple en el sentido de que sus elementos no necesitan tener claves únicas, de modo que un valor de clave puede tener asociados varios valores de elemento.

  • Un contenedor asociativo simple porque sus valores de elemento son sus valores de clave.

  • Una clase de plantilla, porque la funcionalidad que proporciona es genérica y por tanto independiente del tipo específico de datos contenido como elementos. En su lugar, el tipo de datos que se usará se especifica como un parámetro en la plantilla de clase junto con la función de comparación y el asignador.

El iterador proporcionado por la clase multiset es un iterador bidireccional, pero las funciones miembro de clase insert y multiset tienen versiones que toman como parámetros de plantilla un iterador de entrada más débil, cuyos requisitos de funcionalidad son más mínimos que los garantizados por la clase de iteradores bidireccionales. Los distintos conceptos de iterador forman una familia relacionada por los refinamientos de su funcionalidad. Cada concepto de iterador tiene su propio conjunto de requisitos y los algoritmos que funcionan con ellos deben limitar sus suposiciones a los requisitos proporcionados por ese tipo de iterador. Se puede suponer que se puede desreferenciar un iterador de entrada para hacer referencia a un objeto y que se puede incrementar hasta el iterador siguiente de la secuencia. Se trata de un conjunto mínimo de funcionalidad, pero es suficiente para poder comunicarse sobre un intervalo de iteradores [First, Last) en el contexto de las funciones miembro de clase.

En general, la elección del tipo de contenedor se debe tomar según el tipo de búsqueda y de inserción que necesite la aplicación. Los contenedores asociativos están optimizados para las operaciones de búsqueda, inserción y eliminación. Las funciones miembro que admiten estas operaciones explícitamente las realizan de forma eficiente en un tiempo que es proporcional en promedio al logaritmo del número de elementos del contenedor. La inserción de elementos no invalida ningún iterador y al quitar elementos solo se invalidan los iteradores que habían apuntado específicamente a los elementos quitados.

La clase multiset debe ser el contenedor asociativo preferido cuando la aplicación satisfaga las condiciones que asocian los valores a sus claves. Los elementos de una clase multiset pueden ser varios y actuar como sus propias claves de ordenación, por lo que las claves no son únicas. Un modelo para este tipo de estructura es una lista ordenada, por ejemplo, de palabras en las que las palabras pueden aparecer más de una vez. Si no se permitieran varias repeticiones de las palabras, la estructura de contenedor adecuada sería un set. Si se asociaron definiciones únicas como valores a la lista de palabras clave únicas, la estructura adecuada para contener estos datos sería una clase map. Si por el contrario las definiciones no son únicas, un multimap sería el contenedor preferido.

La clase multiset ordena la secuencia que controla llamando a un objeto de función almacenado de tipo Compare. Este objeto almacenado es una función de comparación a la que se puede tener acceso llamando a la función miembro key_comp. En general, se debe poder comparar si los elementos son menores que otros para poder establecer este orden; de este modo, dados dos elementos cualesquiera, se puede determinar que son equivalentes (en el sentido de que ninguno es menor que el otro) o que uno es menor que el otro. Esto produce una ordenación entre los elementos no equivalentes. En un sentido más técnico, la función de comparación es un predicado binario que induce una ordenación débil estricta en el sentido matemático estándar. Un predicado binario f(x,y) es un objeto de función que tiene dos objetos de argumento x e y, y un valor devuelto de true o false. Una ordenación impuesta en un conjunto es una ordenación débil estricta si el predicado binario es irreflexivo, antisimétrico y transitivo, y si la equivalencia es transitiva, donde dos objetos x e y se definen como equivalentes cuando tanto f(x,y) como f(y,x) son false. Si la condición más fuerte de igualdad entre las claves reemplaza la de equivalencia, la ordenación se convierte en total (en el sentido de que todos los elementos se ordenan entre sí) y las claves coincidentes serán indiscernibles unas de otras.

Constructores

multiset

Construye un multiset que está vacío o que es una copia de todo o de parte de un multiset especificado.

Typedefs

allocator_type

Definición de tipos para la clase allocator del objeto multiset.

const_iterator

Definición de tipos para un iterador bidireccional que puede leer un elemento const del multiset.

const_pointer

Definición de tipos para un puntero a un elemento const de un multiset.

const_reference

Definición de tipos para una referencia a un elemento const almacenado en un multiset para leer y realizar operaciones const.

const_reverse_iterator

Definición de tipos para un iterador bidireccional que puede leer cualquier elemento const del multiset.

difference_type

Definición de tipos enteros con signo para el número de elementos de un multiset en un intervalo entre los elementos a los que apuntan los iteradores.

iterator

Definición de tipos para un iterador bidireccional que puede leer o modificar cualquier elemento de un multiset.

key_compare

Definición de tipos para un objeto de función que puede comparar dos claves para determinar el orden relativo de dos elementos del multiset.

key_type

Definición de tipos para un objeto de función que puede comparar dos claves de ordenación para determinar el orden relativo de dos elementos del multiset.

pointer

Definición de tipos para un puntero a un elemento de un multiset.

reference

Definición de tipos para una referencia a un elemento almacenado en un multiset.

reverse_iterator

Definición de tipos para un iterador bidireccional que puede leer o modificar un elemento de un multiset invertido.

size_type

Tipo entero sin signo que puede representar el número de elementos de un multiset.

value_compare

Definición de tipos para un objeto de función que puede comparar dos elementos como claves de ordenación para determinar su orden relativo en el multiset.

value_type

Definición de tipos que describe un objeto almacenado como un elemento como un multiset en su capacidad como valor.

Funciones miembro

begin

Devuelve un iterador que apunta al primer elemento del multiset.

cbegin

Devuelve un iterador const que direcciona el primer elemento del multiset.

cend

Devuelve un iterador constante que direcciona la ubicación que sigue al último elemento de multiset.

clear

Borra todos los elementos de un multiset.

count

Devuelve el número de elementos de un multiset cuya clave coincide con la clave especificada como parámetro.

crbegin

Devuelve un iterador const que direcciona el primer elemento de un set invertido.

crend

Devuelve un iterador const que direcciona la ubicación que sigue al último elemento de un set invertido.

emplace

Inserta en un multiset un elemento construido en contexto.

emplace_hint

Inserta en un multiset un elemento construido en contexto, con una sugerencia de colocación.

empty

Comprueba si un multiset está vacío.

end

Devuelve un iterador que apunta a la ubicación posterior al último elemento de un multiset invertido.

equal_range

Devuelve un par de iteradores. El primer iterador del par apunta al primer elemento de un multiset cuya clave es mayor que una clave especificada. El segundo iterador del par apunta al primer elemento del multiset cuya clave es igual o mayor que la clave especificada.

erase

Quita un elemento o un intervalo de elementos de una clase multiset de las posiciones especificadas o quita los elementos que coinciden con una clave especificada.

find

Devuelve un iterador que apunta a la primera ubicación de un elemento en un multiset que tiene una clave igual que una clave especificada.

get_allocator

Devuelve una copia del objeto allocator utilizado para construir el multiset.

insert

Inserta un elemento o un intervalo de elementos en un multiset.

key_comp

Proporciona un objeto de función que puede comparar dos claves de ordenación para determinar el orden relativo de dos elementos en el multiset.

lower_bound

Devuelve un iterador al primer elemento de un multiset cuya clave es igual o mayor que una clave especificada.

max_size

Devuelve la longitud máxima del multiset.

rbegin

Devuelve un iterador que apunta al primer elemento de un multiset invertido.

rend

Devuelve un iterador que apunta a la ubicación posterior al último elemento de un multiset invertido.

size

Devuelve el número de elementos de un multiset.

swap

Intercambia los elementos de dos multiset.

upper_bound

Devuelve un iterador al primer elemento de un multiset con una clave que es mayor que una clave especificada.

value_comp

Recupera una copia del objeto de comparación que se emplea para ordenar los valores de elementos de un multiset.

Operadores

operator=

Reemplaza los elementos de un multiset con una copia de otro multiset.

Requisitos

Encabezado: <set>

Espacio de nombres: std

Vea también

Referencia

Seguridad para subprocesos en la biblioteca estándar de C++

Biblioteca de plantillas estándar

Conceptos

Contenedores

Otros recursos

miembros de <conjunto>