multiset (Clase)multiset Class

La clase multiset de la Biblioteca estándar de C++ se usa 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.The C++ Standard Library multiset class is used for the storage and retrieval of data from a collection in which the values of the elements contained need not be unique and in which they serve as the key values according to which the data is automatically ordered. El valor de clave de un elemento de un multiset no se puede cambiar directamente.The key value of an element in a multiset may not be changed directly. En su lugar, se deben eliminar los valores anteriores e insertar elementos con valores nuevos.Instead, old values must be deleted and elements with new values inserted.

SintaxisSyntax

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

ParámetrosParameters

ClaveKey
Tipo de datos de elementos que se va a almacenar en la multiset.The element data type to be stored in the multiset.

CompareCompare
El tipo que proporciona un objeto de función que puede comparar dos valores de elemento como claves de ordenación para determinar su orden relativo en multiset .The type that provides a function object that can compare two element values as sort keys to determine their relative order in the multiset. El predicado binario less <Key> es el valor predeterminado.The binary predicate less<Key> is the default value.

En C++ 14, puede habilitar la búsqueda heterogénea especificando el std::less<> std::greater<> predicado o que no tiene ningún parámetro de tipo.In C++14, you can enable heterogeneous lookup by specifying the std::less<> or std::greater<> predicate that has no type parameters. Para obtener más información, vea búsqueda heterogénea en contenedores asociativos .See Heterogeneous Lookup in Associative Containers for more information.

AsignadorAllocator
Tipo que representa el objeto de asignador almacenado que encapsula los detalles sobre la multiset asignación y desasignación de memoria de.The type that represents the stored allocator object that encapsulates details about the multiset's allocation and deallocation of memory. El valor predeterminado es allocator<Key>.The default value is allocator<Key>.

ComentariosRemarks

La clase de la biblioteca estándar de C++ multiset es:The C++ Standard Library multiset class is:

  • Un contenedor asociativo de tamaño variable que admite la recuperación eficaz de valores de elemento según un valor de clave asociado.An associative container, which is a variable size container that supports the efficient retrieval of element values based on an associated key value.

  • Reversible, porque proporciona iteradores bidireccionales para tener acceso a sus elementos.Reversible, because it provides bidirectional iterators to access its elements.

  • 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.Sorted, because its elements are ordered by key values within the container in accordance with a specified comparison function.

  • Múltiplo en el sentido de que sus elementos no necesitan tener claves únicas, de modo que un valor de clave puede tener muchos valores de elemento asociados.Multiple in the sense that its elements don't need to have unique keys, so that one key value can have many element values associated with it.

  • Un contenedor asociativo simple porque sus valores de elemento son sus valores de clave.A simple associative container because its element values are its key values.

  • Una plantilla de clase, porque la funcionalidad que proporciona es genérica e independiente del tipo específico de datos contenido como elementos.A class template, because the functionality it provides is generic and so independent of the specific type of data contained as elements. 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.The data type to be used is, instead, specified as a parameter in the class template along with the comparison function and allocator.

El iterador proporcionado por la multiset clase 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.The iterator provided by the multiset class is a bidirectional iterator, but the class member functions insert and multiset have versions that take as template parameters a weaker input iterator, whose functionality requirements are more minimal than those guaranteed by the class of bidirectional iterators. Los distintos conceptos de iterador forman una familia relacionada por los refinamientos de su funcionalidad.The different iterator concepts form a family related by refinements in their functionality. 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.Each iterator concept has its own set of requirements and the algorithms that work with them must limit their assumptions to the requirements provided by that type of iterator. 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.It may be assumed that an input iterator may be dereferenced to refer to some object and that it may be incremented to the next iterator in the sequence. Se trata de un conjunto mínimo de función, pero es suficiente para poder comunicarse sobre un intervalo de iteradores [ First, Last) en el contexto de las funciones miembro de clase.This is a minimal set of functionality, but it is enough to be able to talk meaningfully about a range of iterators [ First, Last) in the context of the class's member functions.

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.The choice of container type should be based in general on the type of searching and inserting required by the application. Los contenedores asociativos están optimizados para las operaciones de búsqueda, inserción y eliminación.Associative containers are optimized for the operations of lookup, insertion, and removal. Las funciones miembro que admiten explícitamente estas operaciones son eficaces y las realizan en un tiempo que es en promedio proporcional al logaritmo del número de elementos del contenedor.The member functions that explicitly support these operations are efficient, doing them in a time that is on average proportional to the logarithm of the number of elements in the container. La inserción de elementos no invalida ningún iterador y al quitar elementos solo se invalidan los iteradores que habían apuntado a los elementos quitados.Inserting elements invalidates no iterators, and removing elements invalidates only those iterators that had pointed at the removed elements.

multisetDebe ser el contenedor asociativo elegido cuando la aplicación satisfaga las condiciones que asocian los valores a sus claves.The multiset should be the associative container of choice when the conditions associating the values with their keys are satisfies by the application. Los elementos de un multiset pueden ser varios y servir como sus propios criterios de ordenación, por lo que las claves no son únicas.The elements of a multiset may be multiple and serve as their own sort keys, so keys aren't unique. 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.A model for this type of structure is an ordered list of, say, words in which the words may occur more than once. Si no se permitieran varias repeticiones de las palabras, la estructura de contenedor adecuada sería un set.Had multiple occurrences of the words not been allowed, then a set would have been the appropriate container structure. 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.If unique definitions were attached as values to the list of unique key words, then a map would be an appropriate structure to contain this data. Si en su lugar las definiciones no son únicas, un multimap sería el contenedor preferido.If instead the definitions weren't unique, then a multimap would be the container of choice.

multisetOrdena la secuencia que controla llamando a un objeto de función almacenado de tipo Compare.The multiset orders the sequence it controls by calling a stored function object of type Compare. Este objeto almacenado es una función de comparación a la que se puede tener acceso mediante la llamada a la función miembro key_comp.This stored object is a comparison function that may be accessed by calling the member function key_comp. En general, los elementos deben ser simplemente menos comparables para establecer este orden: para que, dados dos elementos cualesquiera, se pueda determinar que son equivalentes (en el sentido de que ninguno es menor que el otro) o que uno es menor que el otro.In general, the elements need be merely less than comparable to establish this order: so that, given any two elements, it may be determined either that they're equivalent (in the sense that neither is less than the other) or that one is less than the other. Esto produce una ordenación entre los elementos no equivalentes.This results in an ordering between the nonequivalent elements. 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.On a more technical note, the comparison function is a binary predicate that induces a strict weak ordering in the standard mathematical sense. 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 .A binary predicate f(x, y) is a function object that has two argument objects x and y and a return value of true or 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.An ordering imposed on a set is a strict weak ordering if the binary predicate is irreflexive, antisymmetric, and transitive and if equivalence is transitive, where two objects x and y are defined to be equivalent when both f(x,y) and f(y,x) are 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.If the stronger condition of equality between keys replaces that of equivalence, then the ordering becomes total (in the sense that all the elements are ordered with respect to each other) and the keys matched will be indiscernible from each other.

En C++ 14, puede habilitar la búsqueda heterogénea especificando el std::less<> std::greater<> predicado o que no tiene ningún parámetro de tipo.In C++14, you can enable heterogeneous lookup by specifying the std::less<> or std::greater<> predicate that has no type parameters. Para obtener más información, vea búsqueda heterogénea en contenedores asociativos .See Heterogeneous Lookup in Associative Containers for more information.

ConstructoresConstructors

ConstructorConstructor DescripciónDescription
MultiSetmultiset Construye un multiset que está vacío o que es una copia de todo o de parte de un multiset especificado.Constructs a multiset that is empty or that is a copy of all or part of a specified multiset.

TypedefsTypedefs

Nombre de tipoType name DescripciónDescription
allocator_typeallocator_type Definición de tipos para la clase allocator del objeto multiset.A typedef for the allocator class for the multiset object.
const_iteratorconst_iterator Definición de tipo para un iterador bidireccional que puede leer un const elemento en multiset .A typedef for a bidirectional iterator that can read a const element in the multiset.
const_pointerconst_pointer Definición de tipo para un puntero a un const elemento de un multiset .A typedef for a pointer to a const element in a multiset.
const_referenceconst_reference Definición de tipo para una referencia a un const elemento almacenado en un multiset para leer y realizar const operaciones.A typedef for a reference to a const element stored in a multiset for reading and doing const operations.
const_reverse_iteratorconst_reverse_iterator Definición de tipo para un iterador bidireccional que puede leer cualquier const elemento del multiset .A typedef for a bidirectional iterator that can read any const element in the multiset.
difference_typedifference_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.A signed integer typedef for the number of elements of a multiset in a range between elements pointed to by iterators.
apuntaiterator Definición de tipos para un iterador bidireccional que puede leer o modificar cualquier elemento de un multiset.A typedef for a bidirectional iterator that can read or modify any element in a multiset.
key_comparekey_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.A typedef for a function object that can compare two keys to determine the relative order of two elements in the multiset.
key_typekey_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.A typedef for a function object that can compare two sort keys to determine the relative order of two elements in the multiset.
punteropointer Definición de tipos para un puntero a un elemento de un multiset.A typedef for a pointer to an element in a multiset.
referencereference Definición de tipos para una referencia a un elemento almacenado en un multiset.A typedef for a reference to an element stored in a multiset.
reverse_iteratorreverse_iterator Definición de tipos para un iterador bidireccional que puede leer o modificar un elemento de un multiset invertido.A typedef for a bidirectional iterator that can read or modify an element in a reversed multiset.
size_typesize_type Tipo entero sin signo que puede representar el número de elementos de un multiset.An unsigned integer type that can represent the number of elements in a multiset.
value_comparevalue_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.The typedef for a function object that can compare two elements as sort keys to determine their relative order in the multiset.
value_typevalue_type Definición de tipos que describe un objeto almacenado como un elemento como un multiset en su capacidad como valor.A typedef that describes an object stored as an element as a multiset in its capacity as a value.

Funciones miembroMember functions

Función de miembroMember function DescripciónDescription
iniciabegin Devuelve un iterador que apunta al primer elemento del multiset.Returns an iterator that points to the first element in the multiset.
cbegincbegin Devuelve un iterador const que direcciona el primer elemento del multiset.Returns a const iterator that addresses the first element in the multiset.
cendcend Devuelve un iterador constante que direcciona la ubicación que sigue al último elemento de multiset.Returns a const iterator that addresses the location succeeding the last element in a multiset.
clearclear Borra todos los elementos de un multiset.Erases all the elements of a multiset.
contienec++ 20containsC++20 Compruebe si hay un elemento con la clave especificada en multiset .Check if there's an element with the specified key in the multiset.
countcount Devuelve el número de elementos de un multiset cuya clave coincide con la clave especificada como parámetro.Returns the number of elements in a multiset whose key matches the key specified as a parameter.
crbegincrbegin Devuelve un iterador constante que direcciona el primer elemento de multiset invertido.Returns a const iterator addressing the first element in a reversed multiset.
crendcrend Devuelve un iterador constante que direcciona la ubicación que sigue al último elemento de multiset invertido.Returns a const iterator that addresses the location succeeding the last element in a reversed multiset.
emplaceemplace Inserta en un multiset un elemento construido en contexto.Inserts an element constructed in place into a multiset.
emplace_hintemplace_hint Inserta en un multiset un elemento construido en contexto, con una sugerencia de colocación.Inserts an element constructed in place into a multiset, with a placement hint.
emptyempty Comprueba si un multiset está vacío.Tests if a multiset is empty.
endend Devuelve un iterador que apunta a la ubicación posterior al último elemento de un multiset invertido.Returns an iterator that points to the location after the last element in a multiset.
equal_rangeequal_range Devuelve un par de iteradores.Returns a pair of iterators. El primer iterador del par apunta al primer elemento de un multiset cuya clave es mayor que una clave especificada.The first iterator in the pair points to the first element in a multiset with a key that is greater than a specified key. El segundo iterador del par apunta al primer elemento del multiset cuya clave es igual o mayor que la clave especificada.The second iterator in the pair points to first element in the multiset with a key that is equal to or greater than the key.
eraseerase 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.Removes an element or a range of elements in a multiset from specified positions or removes elements that match a specified key.
findfind 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.Returns an iterator that points to the first location of an element in a multiset that has a key equal to a specified key.
get_allocatorget_allocator Devuelve una copia del objeto allocator utilizado para construir el multiset.Returns a copy of the allocator object that is used to construct the multiset.
insertinsert Inserta un elemento o un intervalo de elementos en un multiset.Inserts an element or a range of elements into a multiset.
key_compkey_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.Provides a function object that can compare two sort keys to determine the relative order of two elements in the multiset.
lower_boundlower_bound Devuelve un iterador al primer elemento de un multiset cuya clave es igual o mayor que una clave especificada.Returns an iterator to the first element in a multiset with a key that is equal to or greater than a specified key.
max_sizemax_size Devuelve la longitud máxima del multiset.Returns the maximum length of the multiset.
rbeginrbegin Devuelve un iterador que apunta al primer elemento de un multiset invertido.Returns an iterator that points to the first element in a reversed multiset.
rendrend Devuelve un iterador que apunta a la ubicación posterior al último elemento de un multiset invertido.Returns an iterator that points to the location succeeding the last element in a reversed multiset.
sizesize Devuelve el número de elementos de un multiset.Returns the number of elements in a multiset.
swapswap Intercambia los elementos de dos multiset.Exchanges the elements of two multisets.
upper_boundupper_bound Devuelve un iterador al primer elemento de un multiset con una clave que es mayor que una clave especificada.Returns an iterator to the first element in a multiset with a key that is greater than a specified key.
value_compvalue_comp Recupera una copia del objeto de comparación que se emplea para ordenar los valores de elementos de un multiset.Retrieves a copy of the comparison object that is used to order element values in a multiset.

OperadoresOperators

OperadorOperator DescripciónDescription
operador =operator= Reemplaza los elementos de un multiset con una copia de otro multiset.Replaces the elements of a multiset with a copy of another multiset.

RequisitosRequirements

Encabezado:<set>Header: <set>

Espacio de nombres: stdNamespace: std

MultiSet:: allocator_typemultiset::allocator_type

Un tipo que representa la clase de asignador para el objeto multisetA type that represents the allocator class for the multiset object

typedef Allocator allocator_type;

ComentariosRemarks

allocator_type es un sinónimo del parámetro de plantilla Allocator.allocator_type is a synonym for the template parameter Allocator.

Para obtener más información sobre Allocator, vea la sección Comentarios del tema multiset (Clase).For more information on Allocator, see the Remarks section of the multiset Class topic.

EjemploExample

Vea el ejemplo de get_allocator para obtener un ejemplo que usa allocator_typeSee the example for get_allocator for an example using allocator_type

MultiSet:: Beginmultiset::begin

Devuelve un iterador que se dirige al primer elemento del conjunto múltiple.Returns an iterator addressing the first element in the multiset.

const_iterator begin() const;

iterator begin();

Valor devueltoReturn Value

Un iterador bidireccional que se dirige al primer elemento del conjunto múltiple o a la ubicación siguiente a un conjunto múltiple vacío.A bidirectional iterator addressing the first element in the multiset or the location succeeding an empty multiset.

EjemploExample

// multiset_begin.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int>::iterator ms1_Iter;
   multiset <int>::const_iterator ms1_cIter;

   ms1.insert( 1 );
   ms1.insert( 2 );
   ms1.insert( 3 );

   ms1_Iter = ms1.begin( );
   cout << "The first element of ms1 is " << *ms1_Iter << endl;

   ms1_Iter = ms1.begin( );
   ms1.erase( ms1_Iter );

   // The following 2 lines would err as the iterator is const
   // ms1_cIter = ms1.begin( );
   // ms1.erase( ms1_cIter );

   ms1_cIter = ms1.begin( );
   cout << "The first element of ms1 is now " << *ms1_cIter << endl;
}
The first element of ms1 is 1
The first element of ms1 is now 2

MultiSet:: cbegin (multiset::cbegin

Devuelve un const iterador que direcciona el primer elemento del intervalo.Returns a const iterator that addresses the first element in the range.

const_iterator cbegin() const;

Valor devueltoReturn Value

Un const iterador de acceso bidireccional que apunta al primer elemento del intervalo o la ubicación situada más allá del final de un intervalo vacío (para un intervalo vacío, cbegin() == cend() ).A const bidirectional-access iterator that points at the first element of the range, or the location just beyond the end of an empty range (for an empty range, cbegin() == cend()).

ComentariosRemarks

Con el valor devuelto de cbegin , los elementos del intervalo no se pueden modificar.With the return value of cbegin, the elements in the range can't be modified.

Se puede usar esta función miembro en lugar de la función miembro begin() para garantizar que el valor devuelto es const_iterator.You can use this member function in place of the begin() member function to guarantee that the return value is const_iterator. Normalmente, se usa junto con la palabra clave de deducción de tipos auto, como se muestra en el ejemplo siguiente.Typically, it's used in conjunction with the auto type deduction keyword, as shown in the following example. En el ejemplo, considere Container ser un contenedor modificable (no const ) de cualquier tipo que admita begin() y cbegin() .In the example, consider Container to be a modifiable (non- const) container of any kind that supports begin() and cbegin().

auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();

// i2 is Container<T>::const_iterator

MultiSet:: cendmultiset::cend

Devuelve un const iterador que direcciona la ubicación situada más allá del último elemento de un intervalo.Returns a const iterator that addresses the location just beyond the last element in a range.

const_iterator cend() const;

Valor devueltoReturn Value

Un const iterador de acceso bidireccional que apunta justo después del final del intervalo.A const bidirectional-access iterator that points just beyond the end of the range.

ComentariosRemarks

cend se usa para probar si un iterador ha sobrepasado el final de su intervalo.cend is used to test whether an iterator has passed the end of its range.

Se puede usar esta función miembro en lugar de la función miembro end() para garantizar que el valor devuelto es const_iterator.You can use this member function in place of the end() member function to guarantee that the return value is const_iterator. Normalmente, se usa junto con la palabra clave de deducción de tipos auto, como se muestra en el ejemplo siguiente.Typically, it's used in conjunction with the auto type deduction keyword, as shown in the following example. En el ejemplo, considere Container ser un contenedor modificable (no const ) de cualquier tipo que admita end() y cend() .In the example, consider Container to be a modifiable (non- const) container of any kind that supports end() and cend().

auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();

// i2 is Container<T>::const_iterator

El valor devuelto por no cend se debe desreferenciar.The value returned by cend shouldn't be dereferenced.

MultiSet:: Clearmultiset::clear

Borra todos los elementos de un conjunto múltiple.Erases all the elements of a multiset.

void clear();

EjemploExample

// multiset_clear.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   multiset <int> ms1;

   ms1.insert( 1 );
   ms1.insert( 2 );

   cout << "The size of the multiset is initially "
        << ms1.size( ) << "." << endl;

   ms1.clear( );
   cout << "The size of the multiset after clearing is "
        << ms1.size( ) << "." << endl;
}
The size of the multiset is initially 2.
The size of the multiset after clearing is 0.

MultiSet:: const_iteratormultiset::const_iterator

Un tipo que proporciona un iterador bidireccional que puede leer un const elemento en el conjunto múltiple.A type that provides a bidirectional iterator that can read a const element in the multiset.

typedef implementation-defined const_iterator;

ComentariosRemarks

No se const_iterator puede usar un tipo para modificar el valor de un elemento.A type const_iterator can't be used to modify the value of an element.

EjemploExample

Vea el ejemplo de begin para obtener un ejemplo que usa const_iterator.See the example for begin for an example using const_iterator.

MultiSet:: const_pointermultiset::const_pointer

Un tipo que proporciona un puntero a un const elemento de un conjunto múltiple.A type that provides a pointer to a const element in a multiset.

typedef typename allocator_type::const_pointer const_pointer;

ComentariosRemarks

No se const_pointer puede usar un tipo para modificar el valor de un elemento.A type const_pointer can't be used to modify the value of an element.

En la mayoría de los casos, se debe usar un elemento iterator para obtener acceso a los elementos de un objeto multiset.In most cases, an iterator should be used to access the elements in a multiset object.

MultiSet:: const_referencemultiset::const_reference

Un tipo que proporciona una referencia a un const elemento almacenado en un conjunto múltiple para leer y realizar const operaciones.A type that provides a reference to a const element stored in a multiset for reading and doing const operations.

typedef typename allocator_type::const_reference const_reference;

EjemploExample

// multiset_const_ref.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   multiset <int> ms1;

   ms1.insert( 10 );
   ms1.insert( 20 );

   // Declare and initialize a const_reference &Ref1
   // to the 1st element
   const int &Ref1 = *ms1.begin( );

   cout << "The first element in the multiset is "
        << Ref1 << "." << endl;

   // The following line would cause an error because the
   // const_reference can't be used to modify the multiset
   // Ref1 = Ref1 + 5;
}
The first element in the multiset is 10.

MultiSet:: const_reverse_iteratormultiset::const_reverse_iterator

Un tipo que proporciona un iterador bidireccional que puede leer cualquier const elemento del conjunto múltiple.A type that provides a bidirectional iterator that can read any const element in the multiset.

typedef std::reverse_iterator<const_iterator> const_reverse_iterator;

ComentariosRemarks

Un tipo const_reverse_iterator no puede modificar el valor de un elemento y se usa para recorrer en iteración el conjunto múltiple en orden inverso.A type const_reverse_iterator can't modify the value of an element and is used to iterate through the multiset in reverse.

EjemploExample

Vea el ejemplo de rend para obtener un ejemplo de cómo declarar y usar el const_reverse_iterator.See the example for rend for an example of how to declare and use the const_reverse_iterator.

MultiSet:: Containsmultiset::contains

Compruebe si hay un elemento con la clave especificada en multiset .Check if there's an element with the specified key in the multiset.

bool contains(const Key& key) const;
template<class K> bool contains(const K& key) const;

ParámetrosParameters

KK
Tipo de la clave.The type of the key.

clavekey
Valor de clave del elemento que se va a buscar.The element's key value to look for.

Valor devueltoReturn Value

true Si el elemento se encuentra en el contenedor; false en caso contrario,.true if the element is found in the container; false otherwise.

ComentariosRemarks

contains() es nuevo en C++ 20.contains() is new in C++20. Para usarlo, especifique la opción del compilador /STD: c + + latest .To use it, specify the /std:c++latest compiler option.

template<class K> bool contains(const K& key) const solo participa en la resolución de sobrecarga si key_compare es transparente.template<class K> bool contains(const K& key) const only participates in overload resolution if key_compare is transparent. Para obtener más información, vea búsqueda heterogénea en contenedores asociativos .See Heterogeneous lookup in associative containers for more information.

EjemploExample

// Requires /std:c++latest
#include <set>
#include <iostream>

int main()
{
    std::multiset<int> theMultiSet = {1, 2};

    std::cout << std::boolalpha; // so booleans show as 'true' or 'false'
    std::cout << theMultiSet.contains(2) << '\n';
    std::cout << theMultiSet.contains(3) << '\n';

    return 0;
}
true
false

MultiSet:: Countmultiset::count

Devuelve el número de elementos de un conjunto múltiple cuya clave coincide con una clave especificada por un parámetro.Returns the number of elements in a multiset whose key matches a parameter-specified key.

size_type count(const Key& key) const;

ParámetrosParameters

clavekey
Clave de los elementos del conjunto múltiple que deben coincidir.The key of the elements to be matched from the multiset.

Valor devueltoReturn Value

Número de elementos del conjunto múltiple cuyo criterio de ordenación coincide con la clave de parámetro.The number of elements in the multiset whose sort key matches the parameter key.

ComentariosRemarks

La función miembro devuelve el número de elementos x del intervaloThe member function returns the number of elements x in the range

[ lower_bound (clave), upper_bound (clave))[ lower_bound(key), upper_bound(key) )

EjemploExample

En el ejemplo siguiente se muestra el uso de la función miembro multiset::count.The following example demonstrates the use of the multiset::count member function.

// multiset_count.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main()
{
    using namespace std;
    multiset<int> ms1;
    multiset<int>::size_type i;

    ms1.insert(1);
    ms1.insert(1);
    ms1.insert(2);

    // Elements don't need to be unique in multiset,
    // so duplicates are allowed and counted.
    i = ms1.count(1);
    cout << "The number of elements in ms1 with a sort key of 1 is: "
         << i << "." << endl;

    i = ms1.count(2);
    cout << "The number of elements in ms1 with a sort key of 2 is: "
         << i << "." << endl;

    i = ms1.count(3);
    cout << "The number of elements in ms1 with a sort key of 3 is: "
         << i << "." << endl;
}
The number of elements in ms1 with a sort key of 1 is: 2.
The number of elements in ms1 with a sort key of 2 is: 1.
The number of elements in ms1 with a sort key of 3 is: 0.

MultiSet:: crbeginmultiset::crbegin

Devuelve un iterador const que direcciona el primer elemento de un conjunto múltiple invertido.Returns a const iterator addressing the first element in a reversed multiset.

const_reverse_iterator crbegin() const;

Valor devueltoReturn Value

Iterador const bidireccional invertido que direcciona el primer elemento de un conjunto múltiple invertido o que direcciona lo que habría sido el último elemento del conjunto múltiple sin invertir.A const reverse bidirectional iterator addressing the first element in a reversed multiset or addressing what had been the last element in the unreversed multiset.

ComentariosRemarks

crbegin se usa con un conjunto múltiple invertido igual que begin se usa con un conjunto múltiple.crbegin is used with a reversed multiset just as begin is used with a multiset.

Con el valor devuelto de crbegin , el objeto MultiSet no se puede modificar.With the return value of crbegin, the multiset object can't be modified.

crbegin puede usarse para iterar un conjunto múltiple hacia atrás.crbegin can be used to iterate through a multiset backwards.

EjemploExample

// multiset_crbegin.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int>::const_reverse_iterator ms1_crIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   ms1_crIter = ms1.crbegin( );
   cout << "The first element in the reversed multiset is "
        << *ms1_crIter << "." << endl;
}
The first element in the reversed multiset is 30.

MultiSet:: crendmultiset::crend

Devuelve un iterador const que se dirige a la ubicación que sigue al último elemento de un conjunto múltiple invertido.Returns a const iterator that addresses the location succeeding the last element in a reversed multiset.

const_reverse_iterator crend() const;

Valor devueltoReturn Value

Un iterador constante bidireccional inverso que se dirige a la ubicación siguiente al último elemento de un conjunto múltiple invertido (la ubicación que había precedido al primer elemento del conjunto múltiple sin invertir).A const reverse bidirectional iterator that addresses the location succeeding the last element in a reversed multiset (the location that had preceded the first element in the unreversed multiset).

ComentariosRemarks

crend se usa con un conjunto múltiple invertido igual que end se usa con un conjunto múltiple.crend is used with a reversed multiset just as end is used with a multiset.

Con el valor devuelto de crend , el objeto MultiSet no se puede modificar.With the return value of crend, the multiset object can't be modified.

Se puede usar crend para comprobar si un iterador inverso ha llegado al final de su conjunto múltiple.crend can be used to test to whether a reverse iterator has reached the end of its multiset.

El valor devuelto por no crend se debe desreferenciar.The value returned by crend shouldn't be dereferenced.

EjemploExample

// multiset_crend.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main() {
   using namespace std;
   multiset <int> ms1;
   multiset <int>::const_reverse_iterator ms1_crIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   ms1_crIter = ms1.crend( ) ;
   ms1_crIter--;
   cout << "The last element in the reversed multiset is "
        << *ms1_crIter << "." << endl;
}

MultiSet::d ifference_typemultiset::difference_type

Un tipo entero con signo que se puede usar para representar el número de elementos de un conjunto múltiple en un intervalo entre elementos a los que apuntan los iteradores.A signed integer type that can be used to represent the number of elements of a multiset in a range between elements pointed to by iterators.

typedef typename allocator_type::difference_type difference_type;

ComentariosRemarks

El difference_type es el tipo devuelto al restar o incrementar los iteradores del contenedor.The difference_type is the type returned when subtracting or incrementing through iterators of the container. difference_type se suele usar para representar el número de elementos que hay en el intervalo [ first, last) entre los iteradores first y last. Incluye el elemento al que apunta first y el intervalo de elementos que abarca hasta el elemento al que apunta last sin incluirlo.The difference_type is typically used to represent the number of elements in the range [ first, last) between the iterators first and last, includes the element pointed to by first and the range of elements up to, but not including, the element pointed to by last.

Aunque difference_type está disponible para todos los iteradores que cumplen los requisitos de un iterador de entrada, que incluye la clase de iteradores bidireccionales admitida por los contenedores reversibles como set, solo los iteradores de acceso aleatorio proporcionados por un contenedor de acceso aleatorio, como vector, admiten la resta entre iteradores.Although difference_type is available for all iterators that satisfy the requirements of an input iterator, which includes the class of bidirectional iterators supported by reversible containers like set, subtraction between iterators is only supported by random-access iterators provided by a random-access container like vector.

EjemploExample

// multiset_diff_type.cpp
// compile with: /EHsc
#include <iostream>
#include <set>
#include <algorithm>

int main( )
{
   using namespace std;

   multiset <int> ms1;
   multiset <int>::iterator ms1_Iter, ms1_bIter, ms1_eIter;

   ms1.insert( 20 );
   ms1.insert( 10 );
   ms1.insert( 20 );

   ms1_bIter = ms1.begin( );
   ms1_eIter = ms1.end( );

   multiset <int>::difference_type   df_typ5, df_typ10, df_typ20;

   df_typ5 = count( ms1_bIter, ms1_eIter, 5 );
   df_typ10 = count( ms1_bIter, ms1_eIter, 10 );
   df_typ20 = count( ms1_bIter, ms1_eIter, 20 );

   // The keys, and hence the elements, of a multiset aren't unique
   cout << "The number '5' occurs " << df_typ5
        << " times in multiset ms1.\n";
   cout << "The number '10' occurs " << df_typ10
        << " times in multiset ms1.\n";
   cout << "The number '20' occurs " << df_typ20
        << " times in multiset ms1.\n";

   // Count the number of elements in a multiset
   multiset <int>::difference_type  df_count = 0;
   ms1_Iter = ms1.begin( );
   while ( ms1_Iter != ms1_eIter)
   {
      df_count++;
      ms1_Iter++;
   }

   cout << "The number of elements in the multiset ms1 is: "
        << df_count << "." << endl;
}
The number '5' occurs 0 times in multiset ms1.
The number '10' occurs 1 times in multiset ms1.
The number '20' occurs 2 times in multiset ms1.
The number of elements in the multiset ms1 is: 3.

MultiSet:: Emplacemultiset::emplace

Inserta un elemento construido en contexto (no se realiza ninguna operación de copia o de movimiento), con una sugerencia de colocación.Inserts an element constructed in place (no copy or move operations are performed), with a placement hint.

template <class... Args>
iterator emplace(Args&&... args);

ParámetrosParameters

argsargs
Argumentos reenviados para construir un elemento que se va a insertar en el conjunto múltiple.The arguments forwarded to construct an element to be inserted into the multiset.

Valor devueltoReturn Value

Iterador al elemento recién insertado.An iterator to the newly inserted element.

ComentariosRemarks

Esta función no invalida ninguna referencia a elementos contenedores, pero puede invalidar todos los iteradores al contenedor.No references to container elements are invalidated by this function, but it may invalidate all iterators to the container.

Durante emplazamiento, si se produce una excepción, el estado del contenedor no se modifica.During emplacement, if an exception is thrown, the container's state isn't modified.

EjemploExample

// multiset_emplace.cpp
// compile with: /EHsc
#include <set>
#include <string>
#include <iostream>

using namespace std;

template <typename S> void print(const S& s) {
    cout << s.size() << " elements: ";

    for (const auto& p : s) {
        cout << "(" << p << ") ";
    }

    cout << endl;
}

int main()
{
    multiset<string> s1;

    s1.emplace("Anna");
    s1.emplace("Bob");
    s1.emplace("Carmine");

    cout << "multiset modified, now contains ";
    print(s1);
    cout << endl;

    s1.emplace("Bob");

    cout << "multiset modified, now contains ";
    print(s1);
    cout << endl;
}

MultiSet:: emplace_hintmultiset::emplace_hint

Inserta un elemento construido en contexto (no se realiza ninguna operación de copia o de movimiento), con una sugerencia de colocación.Inserts an element constructed in place (no copy or move operations are performed), with a placement hint.

template <class... Args>
iterator emplace_hint(
    const_iterator where,
    Args&&... args);

ParámetrosParameters

argsargs
Argumentos reenviados para construir un elemento que se va a insertar en el conjunto múltiple.The arguments forwarded to construct an element to be inserted into the multiset.

mientraswhere
Lugar donde se va a iniciar la búsqueda del punto de inserción correcto.The place to start searching for the correct point of insertion. (Si ese punto precede inmediatamente a, lainserción se puede realizar en tiempo constante amortizado en lugar de en tiempo logarítmico).(If that point immediately precedes where, insertion can occur in amortized constant time instead of logarithmic time.)

Valor devueltoReturn Value

Iterador al elemento recién insertado.An iterator to the newly inserted element.

ComentariosRemarks

Esta función no invalida ninguna referencia a elementos contenedores, pero puede invalidar todos los iteradores al contenedor.No references to container elements are invalidated by this function, but it may invalidate all iterators to the container.

Durante emplazamiento, si se produce una excepción, el estado del contenedor no se modifica.During emplacement, if an exception is thrown, the container's state isn't modified.

Para obtener un ejemplo de código, vea set::emplace_hint.For a code example, see set::emplace_hint.

MultiSet:: Emptymultiset::empty

Prueba si un conjunto múltiple está vacío.Tests if a multiset is empty.

bool empty() const;

Valor devueltoReturn Value

true Si el conjunto múltiple está vacío; false si el conjunto múltiple no está vacío.true if the multiset is empty; false if the multiset is nonempty.

EjemploExample

// multiset_empty.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main()
{
   using namespace std;
   multiset <int> ms1, ms2;
   ms1.insert ( 1 );

   if ( ms1.empty( ) )
      cout << "The multiset ms1 is empty." << endl;
   else
      cout << "The multiset ms1 is not empty." << endl;

   if ( ms2.empty( ) )
      cout << "The multiset ms2 is empty." << endl;
   else
      cout << "The multiset ms2 is not empty." << endl;
}
The multiset ms1 is not empty.
The multiset ms2 is empty.

MultiSet:: endmultiset::end

Devuelve el iterador más allá del final.Returns the past-the-end iterator.

const_iterator end() const;

iterator end();

Valor devueltoReturn Value

El iterador siguiente al final.The past-the-end iterator. Si el conjunto múltiple está vacío, multiset::end() == multiset::begin().If the multiset is empty, then multiset::end() == multiset::begin().

ComentariosRemarks

end se usa para probar si un iterador ha sobrepasado el final de su conjunto múltiple.end is used to test whether an iterator has passed the end of its multiset.

El valor devuelto por End no se debe desreferenciar.The value returned by end shouldn't be dereferenced.

Para obtener un ejemplo de código, vea multiset::find.For a code example, see multiset::find.

MultiSet:: equal_rangemultiset::equal_range

Devuelve un par de iteradores, respectivamente, al primer elemento de un conjunto múltiple cuya clave es mayor que una clave especificada y al primer elemento del conjunto múltiple cuya clave es igual o mayor que la clave especificada.Returns a pair of iterators respectively to the first element in a multiset with a key that is greater than a specified key and to the first element in the multiset with a key that is equal to or greater than the key.

pair <const_iterator, const_iterator> equal_range (const Key& key) const;

pair <iterator, iterator> equal_range (const Key& key);

ParámetrosParameters

clavekey
La clave de argumento que se comparará con la clave de ordenación de un elemento del conjunto múltiple que se está buscando.The argument key to be compared with the sort key of an element from the multiset being searched.

Valor devueltoReturn Value

Un par de iteradores donde el primero es el elemento lower_bound de la clave y el segundo es el elemento upper_bound de la clave.A pair of iterators such that the first is the lower_bound of the key and the second is the upper_bound of the key.

Para tener acceso al primer iterador de un par pr devuelto por la función miembro, use pr.To access the first iterator of a pair pr returned by the member function, use pr. en primer lugar, y para desreferenciar el iterador de límite inferior, use * ( pr .first, and to dereference the lower bound iterator, use *( pr. en primer lugar).first). Para tener acceso al segundo iterador de un par pr devuelto por la función miembro, use pr.To access the second iterator of a pair pr returned by the member function, use pr. en segundo lugar, y para desreferenciar el iterador de límite superior, use * ( pr .second, and to dereference the upper bound iterator, use *( pr. segundo).second).

EjemploExample

// multiset_equal_range.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   typedef multiset<int, less<int> > IntSet;
   IntSet ms1;
   multiset <int> :: const_iterator ms1_RcIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   pair <IntSet::const_iterator, IntSet::const_iterator> p1, p2;
   p1 = ms1.equal_range( 20 );

   cout << "The upper bound of the element with "
        << "a key of 20 in the multiset ms1 is: "
        << *( p1.second ) << "." << endl;

   cout << "The lower bound of the element with "
        << "a key of 20 in the multiset ms1 is: "
        << *( p1.first ) << "." << endl;

   // Compare the upper_bound called directly
   ms1_RcIter = ms1.upper_bound( 20 );
   cout << "A direct call of upper_bound( 20 ) gives "
        << *ms1_RcIter << "," << endl
        << "matching the 2nd element of the pair"
        << " returned by equal_range( 20 )." << endl;

   p2 = ms1.equal_range( 40 );

   // If no match is found for the key,
   // both elements of the pair return end( )
   if ( ( p2.first == ms1.end( ) ) && ( p2.second == ms1.end( ) ) )
      cout << "The multiset ms1 doesn't have an element "
              << "with a key less than 40." << endl;
   else
      cout << "The element of multiset ms1 with a key >= 40 is: "
                << *( p1.first ) << "." << endl;
}
The upper bound of the element with a key of 20 in the multiset ms1 is: 30.
The lower bound of the element with a key of 20 in the multiset ms1 is: 20.
A direct call of upper_bound( 20 ) gives 30,
matching the 2nd element of the pair returned by equal_range( 20 ).
The multiset ms1 doesn't have an element with a key less than 40.

MultiSet:: Erasemultiset::erase

Quita un elemento o un intervalo de elementos de un conjunto múltiple de las posiciones especificadas o quita los elementos que coinciden con una clave especificada.Removes an element or a range of elements in a multiset from specified positions or removes elements that match a specified key.

iterator erase(
    const_iterator Where);

iterator erase(
    const_iterator First,
    const_iterator Last);

size_type erase(
    const key_type& Key);

ParámetrosParameters

MientrasWhere
Posición del elemento que se va a quitar.Position of the element to be removed.

LugarFirst
Posición del primer elemento que se va a quitar.Position of the first element to be removed.

GuardadoLast
Posición situada más allá del último elemento que se va a quitar.Position just beyond the last element to be removed.

ClaveKey
Valor de clave de los elementos que se van a quitar.The key value of the elements to be removed.

Valor devueltoReturn Value

Para las dos primeras funciones miembro, iterador bidireccional que designa el primer elemento que permanece más allá de los elementos quitados, o un elemento que es el final del conjunto múltiple si no existe ese elemento.For the first two member functions, a bidirectional iterator that designates the first element remaining beyond any elements removed, or an element that is the end of the multiset if no such element exists.

Para la tercera función miembro, devuelve el número de elementos que se han quitado del conjunto múltiple.For the third member function, returns the number of elements that have been removed from the multiset.

ComentariosRemarks

Para obtener un ejemplo de código, vea set::erase.For a code example, see set::erase.

MultiSet:: Findmultiset::find

Devuelve un iterador que hace referencia a la ubicación de un elemento de un conjunto múltiple que tiene una clave equivalente a una clave especificada.Returns an iterator that refers to the location of an element in a multiset that has a key equivalent to a specified key.

iterator find(const Key& key);

const_iterator find(const Key& key) const;

ParámetrosParameters

clavekey
El valor de la clave con el que debe coincidir el criterio de ordenación de un elemento del conjunto múltiple en el que se buscará.The key value to be matched by the sort key of an element from the multiset being searched.

Valor devueltoReturn Value

Iterador que hace referencia a la ubicación de un elemento con una clave especificada, o la ubicación siguiente al último elemento del conjunto múltiple (multiset::end()) si no se encuentra ninguna coincidencia con la clave.An iterator that refers to the location of an element with a specified key, or the location succeeding the last element in the multiset ( multiset::end()) if no match is found for the key.

ComentariosRemarks

La función miembro devuelve un iterador que hace referencia a un elemento del conjunto múltiple cuya clave es equivalente a la clave de argumento de un predicado binario que induce a una ordenación basada en una relación de comparabilidad menor que.The member function returns an iterator that refers to an element in the multiset whose key is equivalent to the argument key under a binary predicate that induces an ordering based on a less than comparability relation.

Si el valor devuelto de find se asigna a un const_iterator , el objeto MultiSet no se puede modificar.If the return value of find is assigned to a const_iterator, the multiset object can't be modified. Si el valor devuelto de find se asigna a un iterator , el objeto MultiSet se puede modificar.If the return value of find is assigned to an iterator, the multiset object can be modified

EjemploExample

// compile with: /EHsc /W4 /MTd
#include <set>
#include <iostream>
#include <vector>
#include <string>

using namespace std;

template <typename T> void print_elem(const T& t) {
    cout << "(" << t << ") ";
}

template <typename T> void print_collection(const T& t) {
    cout << t.size() << " elements: ";

    for (const auto& p : t) {
        print_elem(p);
    }
    cout << endl;
}

template <typename C, class T> void findit(const C& c, T val) {
    cout << "Trying find() on value " << val << endl;
    auto result = c.find(val);
    if (result != c.end()) {
        cout << "Element found: "; print_elem(*result); cout << endl;
    } else {
        cout << "Element not found." << endl;
    }
}

int main()
{
    multiset<int> s1({ 40, 45 });
    cout << "The starting multiset s1 is: " << endl;
    print_collection(s1);

    vector<int> v;
    v.push_back(43);
    v.push_back(41);
    v.push_back(46);
    v.push_back(42);
    v.push_back(44);
    v.push_back(44); // attempt a duplicate

    cout << "Inserting the following vector data into s1: " << endl;
    print_collection(v);

    s1.insert(v.begin(), v.end());

    cout << "The modified multiset s1 is: " << endl;
    print_collection(s1);
    cout << endl;
    findit(s1, 45);
    findit(s1, 6);
}

MultiSet:: get_allocatormultiset::get_allocator

Devuelve una copia del objeto de asignador usado para construir el conjunto múltiple.Returns a copy of the allocator object used to construct the multiset.

allocator_type get_allocator() const;

Valor devueltoReturn Value

El asignador usado por el conjunto múltiple.The allocator used by the multiset.

ComentariosRemarks

Los asignadores de la clase multiset especifican cómo la clase administra el almacenamiento.Allocators for the multiset class specify how the class manages storage. Los asignadores predeterminados proporcionados con las clases contenedoras de la biblioteca estándar de C++ son suficientes para la mayoría de las necesidades de programación.The default allocators supplied with C++ Standard Library container classes are sufficient for most programming needs. La escritura y el uso de sus propias clases de asignador son temas avanzados de C++.Writing and using your own allocator class is an advanced C++ topic.

EjemploExample

// multiset_get_allocator.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   multiset <int>::allocator_type ms1_Alloc;
   multiset <int>::allocator_type ms2_Alloc;
   multiset <double>::allocator_type ms3_Alloc;
   multiset <int>::allocator_type ms4_Alloc;

   // The following lines declare objects
   // that use the default allocator.
   multiset <int> ms1;
   multiset <int, allocator<int> > ms2;
   multiset <double, allocator<double> > ms3;

   cout << "The number of integers that can be allocated"
        << endl << "before free memory is exhausted: "
        << ms2.max_size( ) << "." << endl;

   cout << "The number of doubles that can be allocated"
        << endl << "before free memory is exhausted: "
        << ms3.max_size( ) <<  "." << endl;

   // The following lines create a multiset ms4
   // with the allocator of multiset ms1
   ms1_Alloc = ms1.get_allocator( );
   multiset <int> ms4( less<int>( ), ms1_Alloc );
   ms4_Alloc = ms4.get_allocator( );

   // Two allocators are interchangeable if
   // storage allocated from each can be
   // deallocated with the other
   if( ms1_Alloc == ms4_Alloc )
   {
      cout << "Allocators are interchangeable."
           << endl;
   }
   else
   {
      cout << "Allocators are not interchangeable."
           << endl;
   }
}

MultiSet:: Insertmultiset::insert

Inserta un elemento o un intervalo de elementos en un multiset.Inserts an element or a range of elements into a multiset.

// (1) single element
pair<iterator, bool> insert(
    const value_type& Val);

// (2) single element, perfect forwarded
template <class ValTy>
pair<iterator, bool>
insert(
    ValTy&& Val);

// (3) single element with hint
iterator insert(
    const_iterator Where,
    const value_type& Val);

// (4) single element, perfect forwarded, with hint
template <class ValTy>
iterator insert(
    const_iterator Where,
    ValTy&& Val);

// (5) range
template <class InputIterator>
void insert(
    InputIterator First,
    InputIterator Last);

// (6) initializer list
void insert(
    initializer_list<value_type>
IList);

ParámetrosParameters

ValVal
Valor de un elemento que se va a insertar en el multiset.The value of an element to be inserted into the multiset.

MientrasWhere
Lugar donde se va a iniciar la búsqueda del punto de inserción correcto.The place to start searching for the correct point of insertion. (Si ese punto precede inmediatamente a, lainserción se puede realizar en tiempo constante amortizado en lugar de en tiempo logarítmico).(If that point immediately precedes Where, insertion can occur in amortized constant time instead of logarithmic time.)

ValTyValTy
Parámetro de plantilla que especifica el tipo de argumento que el conjunto múltiple puede usar para construir un elemento de value_typey reenvía de forma perfecta el Val como argumento.Template parameter that specifies the argument type that the multiset can use to construct an element of value_type, and perfect-forwards Val as an argument.

LugarFirst
Posición del primer elemento que se va a copiar.The position of the first element to be copied.

GuardadoLast
Posición situada más allá del último elemento que se va a copiar.The position just beyond the last element to be copied.

InputIteratorInputIterator
Argumento de la función de plantilla que cumple los requisitos de un iterador de entrada que apunta a elementos de un tipo que se puede usar para crear objetos value_type.Template function argument that meets the requirements of an input iterator that points to elements of a type that can be used to construct value_type objects.

IListIList
Initializer_list desde la que se van a copiar los elementos.The initializer_list from which to copy the elements.

Valor devueltoReturn Value

Las funciones miembro de inserción de un solo elemento, (1) y (2), devuelven un iterador a la posición donde se insertó el nuevo elemento en el multiset.The single-element-insert member functions, (1) and (2), return an iterator to the position where the new element was inserted into the multiset.

Las funciones miembro de inserción de un solo elemento con sugerencia, (3) y (4), devuelven un iterador que apunta a la posición donde se insertó el nuevo elemento en el multiset.The single-element-with-hint member functions, (3) and (4), return an iterator that points to the position where the new element was inserted into the multiset.

ComentariosRemarks

Esta función no invalida ningún puntero ni ninguna referencia, pero puede invalidar todos los iteradores al contenedor.No pointers or references are invalidated by this function, but it may invalidate all iterators to the container.

Durante la inserción de un solo elemento, si se produce una excepción, el estado del contenedor no se modifica.During the insertion of just one element, if an exception is thrown, the container's state isn't modified. Durante la inserción de varios elementos, si se produce una excepción, el contenedor se deja en un estado sin especificar pero válido.During the insertion of multiple elements, if an exception is thrown, the container is left in an unspecified but valid state.

El objeto value_type de un contenedor es una definición de tipo que pertenece al contenedor y, para set, multiset<V>::value_type es de tipo const V.The value_type of a container is a typedef that belongs to the container, and, for set, multiset<V>::value_type is type const V.

La función miembro de intervalo (5) inserta la secuencia de valores de elemento en un multiset que corresponde a cada elemento direccionado por un iterador en el intervalo [First, Last); por tanto, Last no se inserta.The range member function (5) inserts the sequence of element values into a multiset that corresponds to each element addressed by an iterator in the range [First, Last); therefore, Last does not get inserted. La función miembro de contenedor end() hace referencia a la posición situada justo después del último elemento del contenedor; por ejemplo, la instrucción s.insert(v.begin(), v.end()); inserta todos los elementos de v en s.The container member function end() refers to the position just after the last element in the container—for example, the statement s.insert(v.begin(), v.end()); inserts all elements of v into s.

La función miembro de lista de inicializadores (6) usa initializer_list para copiar los elementos al conjunto múltiple.The initializer list member function (6) uses an initializer_list to copy elements into the multiset.

Para la inserción de un elemento construido en contexto (es decir, no se realiza ninguna operación de copia o movimiento), vea multiset::emplace y multiset::emplace_hint.For insertion of an element constructed in place—that is, no copy or move operations are performed—see multiset::emplace and multiset::emplace_hint.

EjemploExample

// multiset_insert.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

template <typename S> void print(const S& s) {
    cout << s.size() << " elements: ";

    for (const auto& p : s) {
        cout << "(" << p << ") ";
    }

    cout << endl;
}

int main()
{

    // insert single values
    multiset<int> s1;
    // call insert(const value_type&) version
    s1.insert({ 1, 10 });
    // call insert(ValTy&&) version
    s1.insert(20);

    cout << "The original multiset values of s1 are:" << endl;
    print(s1);

    // intentionally attempt a duplicate, single element
    s1.insert(1);
    cout << "The modified multiset values of s1 are:" << endl;
    print(s1);
    cout << endl;

    // single element, with hint
    s1.insert(s1.end(), 30);
    cout << "The modified multiset values of s1 are:" << endl;
    print(s1);
    cout << endl;

    // The templatized version inserting a jumbled range
    multiset<int> s2;
    vector<int> v;
    v.push_back(43);
    v.push_back(294);
    v.push_back(41);
    v.push_back(330);
    v.push_back(42);
    v.push_back(45);

    cout << "Inserting the following vector data into s2:" << endl;
    print(v);

    s2.insert(v.begin(), v.end());

    cout << "The modified multiset values of s2 are:" << endl;
    print(s2);
    cout << endl;

    // The templatized versions move-constructing elements
    multiset<string>  s3;
    string str1("blue"), str2("green");

    // single element
    s3.insert(move(str1));
    cout << "After the first move insertion, s3 contains:" << endl;
    print(s3);

    // single element with hint
    s3.insert(s3.end(), move(str2));
    cout << "After the second move insertion, s3 contains:" << endl;
    print(s3);
    cout << endl;

    multiset<int> s4;
    // Insert the elements from an initializer_list
    s4.insert({ 4, 44, 2, 22, 3, 33, 1, 11, 5, 55 });
    cout << "After initializer_list insertion, s4 contains:" << endl;
    print(s4);
    cout << endl;
}

MultiSet:: iteratormultiset::iterator

Un tipo que proporciona un iterador bidireccional constante que puede leer cualquier elemento de un conjunto múltiple.A type that provides a constant bidirectional iterator that can read any element in a multiset.

typedef implementation-defined iterator;

EjemploExample

Vea el ejemplo de Begin para obtener un ejemplo de cómo declarar y usar iterator .See the example for begin for an example of how to declare and use an iterator.

MultiSet:: key_compmultiset::key_comp

Recupera una copia del objeto de comparación que se ha usado para ordenar claves de un conjunto múltiple.Retrieves a copy of the comparison object used to order keys in a multiset.

key_compare key_comp() const;

Valor devueltoReturn Value

Devuelve el objeto de función que usa un conjunto múltiple para ordenar sus elementos, que es el parámetro de plantilla Compare.Returns the function object that a multiset uses to order its elements, which is the template parameter Compare.

Para obtener más información sobre Compare, vea la sección Comentarios del tema multiset (Clase).For more information on Compare, see the Remarks section of the multiset Class topic.

ComentariosRemarks

El objeto almacenado define la función miembro:The stored object defines the member function:

bool operator( const Key& x, const Key& y);bool operator( const Key& x, const Key& y);

que devuelve True si x precede estrictamente a y en el criterio de ordenación.which returns true if x strictly precedes y in the sort order.

Tanto key_compare como value_compare son sinónimos para el parámetro de plantilla Compare .Both key_compare and value_compare are synonyms for the template parameter Compare. Ambos tipos se proporcionan para las clases set y MultiSet, donde son idénticos, para la compatibilidad con las clases Map y Multimap, donde son distintos.Both types are provided for the classes set and multiset, where they're identical, for compatibility with the classes map and multimap, where they're distinct.

EjemploExample

// multiset_key_comp.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;

   multiset <int, less<int> > ms1;
   multiset <int, less<int> >::key_compare kc1 = ms1.key_comp( ) ;
   bool result1 = kc1( 2, 3 ) ;
   if( result1 == true )
   {
      cout << "kc1( 2,3 ) returns value of true, "
           << "where kc1 is the function object of s1."
           << endl;
   }
   else
   {
      cout << "kc1( 2,3 ) returns value of false "
           << "where kc1 is the function object of ms1."
           << endl;
   }

   multiset <int, greater<int> > ms2;
   multiset <int, greater<int> >::key_compare kc2 = ms2.key_comp( ) ;
   bool result2 = kc2( 2, 3 ) ;
   if( result2 == true )
   {
      cout << "kc2( 2,3 ) returns value of true, "
           << "where kc2 is the function object of ms2."
           << endl;
   }
   else
   {
      cout << "kc2( 2,3 ) returns value of false, "
           << "where kc2 is the function object of ms2."
           << endl;
   }
}
kc1( 2,3 ) returns value of true, where kc1 is the function object of s1.
kc2( 2,3 ) returns value of false, where kc2 is the function object of ms2.

MultiSet:: key_comparemultiset::key_compare

Un tipo que proporciona un objeto de función que puede comparar dos criterios de ordenación para determinar el orden relativo de dos elementos en el conjunto múltiple.A type that provides a function object that can compare two sort keys to determine the relative order of two elements in the multiset.

typedef Compare key_compare;

ComentariosRemarks

key_compare es un sinónimo del parámetro de plantilla Compare.key_compare is a synonym for the template parameter Compare.

Para obtener más información sobre Compare, vea la sección Comentarios del tema multiset (Clase).For more information on Compare, see the Remarks section of the multiset Class topic.

EjemploExample

Vea el ejemplo de key_comp para obtener un ejemplo de cómo declarar y usar key_compare.See the example for key_comp for an example of how to declare and use key_compare.

MultiSet:: key_typemultiset::key_type

Un tipo que proporciona un objeto de función que puede comparar criterios de ordenación para determinar el orden relativo de dos elementos en el conjunto múltiple.A type that provides a function object that can compare sort keys to determine the relative order of two elements in the multiset.

typedef Key key_type;

ComentariosRemarks

key_type es un sinónimo del parámetro de plantilla Key.key_type is a synonym for the template parameter Key.

Para obtener más información sobre Key, vea la sección Comentarios del tema multiset (Clase).For more information on Key, see the Remarks section of the multiset Class topic.

EjemploExample

Vea el ejemplo de value_type para obtener un ejemplo de cómo declarar y usar key_type.See the example for value_type for an example of how to declare and use key_type.

MultiSet:: lower_boundmultiset::lower_bound

Devuelve un iterador al primer elemento de un conjunto múltiple cuyo valor de clave es igual o mayor que el de una clave especificada.Returns an iterator to the first element in a multiset with a key that is equal to or greater than a specified key.

const_iterator lower_bound(const Key& key) const;

iterator lower_bound(const Key& key);

ParámetrosParameters

clavekey
La clave de argumento que se comparará con la clave de ordenación de un elemento del conjunto múltiple que se está buscando.The argument key to be compared with the sort key of an element from the multiset being searched.

Valor devueltoReturn Value

iteratorO const_iterator que se dirige a la ubicación de un elemento en un conjunto múltiple que tiene una clave igual o mayor que la clave de argumento, o que se dirige a la ubicación siguiente al último elemento del conjunto múltiple si no se encuentra ninguna coincidencia para la clave.An iterator or const_iterator that addresses the location of an element in a multiset that with a key that is equal to or greater than the argument key, or that addresses the location succeeding the last element in the multiset if no match is found for the key.

EjemploExample

// multiset_lower_bound.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int> :: const_iterator ms1_AcIter, ms1_RcIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   ms1_RcIter = ms1.lower_bound( 20 );
   cout << "The element of multiset ms1 with a key of 20 is: "
        << *ms1_RcIter << "." << endl;

   ms1_RcIter = ms1.lower_bound( 40 );

   // If no match is found for the key, end( ) is returned
   if ( ms1_RcIter == ms1.end( ) )
      cout << "The multiset ms1 doesn't have an element "
           << "with a key of 40." << endl;
   else
      cout << "The element of multiset ms1 with a key of 40 is: "
           << *ms1_RcIter << "." << endl;

   // The element at a specific location in the multiset can be
   // found using a dereferenced iterator addressing the location
   ms1_AcIter = ms1.end( );
   ms1_AcIter--;
   ms1_RcIter = ms1.lower_bound( *ms1_AcIter );
   cout << "The element of ms1 with a key matching "
        << "that of the last element is: "
        << *ms1_RcIter << "." << endl;
}
The element of multiset ms1 with a key of 20 is: 20.
The multiset ms1 doesn't have an element with a key of 40.
The element of ms1 with a key matching that of the last element is: 30.

MultiSet:: max_sizemultiset::max_size

Devuelve la longitud máxima del conjunto múltiple.Returns the maximum length of the multiset.

size_type max_size() const;

Valor devueltoReturn Value

La longitud máxima posible del conjunto múltiple.The maximum possible length of the multiset.

EjemploExample

// multiset_max_size.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int>::size_type i;

   i = ms1.max_size( );
   cout << "The maximum possible length "
        << "of the multiset is " << i << "." << endl;
}

MultiSet:: MultiSetmultiset::multiset

Construye un multiset que está vacío o que es una copia de todo o de parte de otro multiset.Constructs a multiset that is empty or that is a copy of all or part of some other multiset.

multiset();

explicit multiset (
    const Compare& Comp);

multiset (
    const Compare& Comp,
    const Allocator& Al);

multiset(
    const multiset& Right);

multiset(
    multiset&& Right);

multiset(
    initializer_list<Type> IList);

multiset(
    initializer_list<Type> IList,
    const Compare& Comp);

multiset(
    initializer_list<Type> IList,
    const Compare& Comp,
    const Allocator& Al);

template <class InputIterator>
multiset (
    InputIterator First,
    InputIterator Last);

template <class InputIterator>
multiset (
    InputIterator First,
    InputIterator Last,
    const Compare& Comp);

template <class InputIterator>
multiset (
    InputIterator First,
    InputIterator Last,
    const Compare& Comp,
    const Allocator& Al);

ParámetrosParameters

AlabamaAl
Clase de asignador de almacenamiento que se va a utilizar para este objeto multiset, que toma como valor predeterminado Allocator.The storage allocator class to be used for this multiset object, which defaults to Allocator.

COMPComp
Función de comparación de tipo const Compare que se utiliza para ordenar los elementos del multiset, que de forma predeterminada es Compare.The comparison function of type const Compare used to order the elements in the multiset, which defaults to Compare.

CorrectaRight
Multiset del que el multiset construido va a ser una copia.The multiset of which the constructed multiset is to be a copy.

LugarFirst
Posición del primer elemento en el intervalo de elementos que se va a copiar.The position of the first element in the range of elements to be copied.

GuardadoLast
Posición del primer elemento más allá del intervalo de elementos que se va a copiar.The position of the first element beyond the range of elements to be copied.

IListIList
initializer_list de la que se van a copiar los elementos.The initializer_list from which to copy the elements.

ComentariosRemarks

Todos los constructores almacenan un tipo de objeto de asignador que administra el almacenamiento en memoria del conjunto múltiple y que se puede devolver más tarde llamando a get_allocator.All constructors store a type of allocator object that manages memory storage for the multiset and that can later be returned by calling get_allocator. El parámetro de asignador se suele omitir en las declaraciones de clase y las macros de preprocesamiento que se utilizan para sustituir asignadores alternativos.The allocator parameter is often omitted in the class declarations and preprocessing macros used to substitute alternative allocators.

Todos los constructores inicializan su multiset.All constructors initialize their multiset.

Todos los constructores almacenan un objeto de función de tipo Compare que se usa para establecer un orden entre las claves del conjunto múltiple y que se puede devolver más tarde llamando a key_comp.All constructors store a function object of type Compare that is used to establish an order among the keys of the multiset and that can later be returned by calling key_comp.

Los tres primeros constructores especifican un conjunto múltiple inicial vacío, el segundo especifica el tipo de función de comparación (COMP) que se va a usar para establecer el orden de los elementos y el tercero especifica explícitamente el tipo de asignador (al) que se va a usar.The first three constructors specify an empty initial multiset, the second specifying the type of comparison function (Comp) to be used in establishing the order of the elements and the third explicitly specifying the allocator type (Al) to be used. La palabra clave explicit suprime ciertas clases de conversión automática de tipos.The keyword explicit suppresses certain kinds of automatic type conversion.

El cuarto constructor especifica una copia del derechode conjunto múltiple.The fourth constructor specifies a copy of the multiset Right.

El quinto constructor especifica una copia del MultiSet moviendo a la derecha.The fifth constructor specifies a copy of the multiset by moving Right.

Los constructores sexto, séptimo y octavo especifican una initializer_list a partir de la que se copian los elementos.The 6th, 7th, and 8th constructors specify an initializer_list from which to copy the elements.

Los tres constructores siguientes copian el intervalo [First, Last) de un multiset especificando de forma cada vez más explícita el tipo de función de comparación y el asignador.The next three constructors copy the range [First, Last) of a multiset with increasing explicitness in specifying the type of comparison function and allocator.

EjemploExample

// multiset_ctor.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main()
{
    using namespace std;
    //multiset <int>::iterator ms1_Iter, ms2_Iter, ms3_Iter;
    multiset <int>::iterator ms4_Iter, ms5_Iter, ms6_Iter, ms7_Iter;

    // Create an empty multiset ms0 of key type integer
    multiset <int> ms0;

    // Create an empty multiset ms1 with the key comparison
    // function of less than, then insert 4 elements
    multiset <int, less<int> > ms1;
    ms1.insert(10);
    ms1.insert(20);
    ms1.insert(20);
    ms1.insert(40);

    // Create an empty multiset ms2 with the key comparison
    // function of greater than, then insert 2 elements
    multiset <int, less<int> > ms2;
    ms2.insert(10);
    ms2.insert(20);

    // Create a multiset ms3 with the
    // allocator of multiset ms1
    multiset <int>::allocator_type ms1_Alloc;
    ms1_Alloc = ms1.get_allocator();
    multiset <int> ms3(less<int>(), ms1_Alloc);
    ms3.insert(30);

    // Create a copy, multiset ms4, of multiset ms1
    multiset <int> ms4(ms1);

    // Create a multiset ms5 by copying the range ms1[ first,  last)
    multiset <int>::const_iterator ms1_bcIter, ms1_ecIter;
    ms1_bcIter = ms1.begin();
    ms1_ecIter = ms1.begin();
    ms1_ecIter++;
    ms1_ecIter++;
    multiset <int> ms5(ms1_bcIter, ms1_ecIter);

    // Create a multiset ms6 by copying the range ms4[ first,  last)
    // and with the allocator of multiset ms2
    multiset <int>::allocator_type ms2_Alloc;
    ms2_Alloc = ms2.get_allocator();
    multiset <int> ms6(ms4.begin(), ++ms4.begin(), less<int>(), ms2_Alloc);

    cout << "ms1 =";
    for (auto i : ms1)
        cout << " " << i;
    cout << endl;

    cout << "ms2 =";
    for (auto i : ms2)
        cout << " " << i;
   cout << endl;

   cout << "ms3 =";
   for (auto i : ms3)
       cout << " " << i;
    cout << endl;

    cout << "ms4 =";
    for (auto i : ms4)
        cout << " " << i;
    cout << endl;

    cout << "ms5 =";
    for (auto i : ms5)
        cout << " " << i;
    cout << endl;

    cout << "ms6 =";
    for (auto i : ms6)
        cout << " " << i;
    cout << endl;

    // Create a multiset by moving ms5
    multiset<int> ms7(move(ms5));
    cout << "ms7 =";
    for (auto i : ms7)
        cout << " " << i;
    cout << endl;

    // Create a multiset with an initializer_list
    multiset<int> ms8({1, 2, 3, 4});
    cout << "ms8=";
    for (auto i : ms8)
        cout << " " << i;
    cout << endl;
}

MultiSet:: Operator =multiset::operator=

Reemplaza los elementos de este multiset con elementos de otro multiset.Replaces the elements of this multiset using elements from another multiset.

multiset& operator=(const multiset& right);

multiset& operator=(multiset&& right);

ParámetrosParameters

correctaright
El objeto multiset del que se copian o mueven los elementos.The multiset from which elements are copied or moved.

ComentariosRemarks

operator= copia o mueve los elementos de derecha a este multiset , en función del tipo de referencia (lvalue o rvalue) utilizado.operator= copies or moves the elements in right into this multiset, depending on the reference type (lvalue or rvalue) used. Se descartan los elementos que estén en este multiset antes de que operator= se ejecute.Elements that are in this multiset before operator= executes are discarded.

EjemploExample

// multiset_operator_as.cpp
// compile with: /EHsc
#include <multiset>
#include <iostream>

int main( )
   {
   using namespace std;
   multiset<int> v1, v2, v3;
   multiset<int>::iterator iter;

   v1.insert(10);

   cout << "v1 = " ;
   for (iter = v1.begin(); iter != v1.end(); iter++)
      cout << *iter << " ";
   cout << endl;

   v2 = v1;
   cout << "v2 = ";
   for (iter = v2.begin(); iter != v2.end(); iter++)
      cout << *iter << " ";
   cout << endl;

// move v1 into v2
   v2.clear();
   v2 = move(v1);
   cout << "v2 = ";
   for (iter = v2.begin(); iter != v2.end(); iter++)
      cout << *iter << " ";
   cout << endl;
   }

MultiSet::p ointermultiset::pointer

Un tipo que proporciona un puntero a un elemento de un conjunto múltiple.A type that provides a pointer to an element in a multiset.

typedef typename allocator_type::pointer pointer;

ComentariosRemarks

Se puede usar un puntero de tipo para modificar el valor de un elemento.A type pointer can be used to modify the value of an element.

En la mayoría de los casos, se debe usar un elemento iterator para obtener acceso a los elementos de un objeto multiset.In most cases, an iterator should be used to access the elements in a multiset object.

MultiSet:: rbeginmultiset::rbegin

Devuelve un iterador que direcciona el primer elemento en un conjunto múltiple invertido.Returns an iterator addressing the first element in a reversed multiset.

const_reverse_iterator rbegin() const;

reverse_iterator rbegin();

Valor devueltoReturn Value

Iterador bidireccional invertido que direcciona el primer elemento de un conjunto múltiple invertido o que direcciona lo que habría sido el último elemento del conjunto múltiple sin invertir.A reverse bidirectional iterator addressing the first element in a reversed multiset or addressing what had been the last element in the unreversed multiset.

ComentariosRemarks

rbegin se usa con un conjunto múltiple invertido igual que rbegin se usa con un conjunto múltiple.rbegin is used with a reversed multiset just as rbegin is used with a multiset.

Si el valor devuelto de rbegin se asigna a un const_reverse_iterator , el objeto MultiSet no se puede modificar.If the return value of rbegin is assigned to a const_reverse_iterator, then the multiset object can't be modified. Si el valor devuelto de rbegin se asigna a un reverse_iterator, el objeto del conjunto múltiple puede modificarse.If the return value of rbegin is assigned to a reverse_iterator, then the multiset object can be modified.

rbegin puede usarse para iterar un conjunto múltiple hacia atrás.rbegin can be used to iterate through a multiset backwards.

EjemploExample

// multiset_rbegin.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int>::iterator ms1_Iter;
   multiset <int>::reverse_iterator ms1_rIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   ms1_rIter = ms1.rbegin( );
   cout << "The first element in the reversed multiset is "
        << *ms1_rIter << "." << endl;

   // begin can be used to start an iteration
   // through a multiset in a forward order
   cout << "The multiset is:";
   for ( ms1_Iter = ms1.begin( ) ; ms1_Iter != ms1.end( ); ms1_Iter++ )
      cout << " " << *ms1_Iter;
   cout << endl;

   // rbegin can be used to start an iteration
   // through a multiset in a reverse order
   cout << "The reversed multiset is:";
   for ( ms1_rIter = ms1.rbegin( ) ; ms1_rIter != ms1.rend( ); ms1_rIter++ )
      cout << " " << *ms1_rIter;
   cout << endl;

   // A multiset element can be erased by dereferencing to its key
   ms1_rIter = ms1.rbegin( );
   ms1.erase ( *ms1_rIter );

   ms1_rIter = ms1.rbegin( );
   cout << "After the erasure, the first element "
        << "in the reversed multiset is "<< *ms1_rIter << "."
        << endl;
}
The first element in the reversed multiset is 30.
The multiset is: 10 20 30
The reversed multiset is: 30 20 10
After the erasure, the first element in the reversed multiset is 20.

MultiSet:: Referencemultiset::reference

Un tipo que proporciona una referencia a un elemento almacenado en un conjunto múltiple.A type that provides a reference to an element stored in a multiset.

typedef typename allocator_type::reference reference;

EjemploExample

// multiset_ref.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   multiset <int> ms1;

   ms1.insert( 10 );
   ms1.insert( 20 );

   // Declare and initialize a reference &Ref1 to the 1st element
   const int &Ref1 = *ms1.begin( );

   cout << "The first element in the multiset is "
        << Ref1 << "." << endl;
}
The first element in the multiset is 10.

MultiSet:: Rendmultiset::rend

Devuelve un iterador que se dirige a la ubicación que sigue al último elemento en un conjunto múltiple invertido.Returns an iterator that addresses the location succeeding the last element in a reversed multiset.

const_reverse_iterator rend() const;

reverse_iterator rend();

Valor devueltoReturn Value

Un iterador bidireccional inverso que se dirige a la ubicación siguiente al último elemento de un conjunto múltiple invertido (la ubicación que había precedido al primer elemento del conjunto múltiple sin invertir).A reverse bidirectional iterator that addresses the location succeeding the last element in a reversed multiset (the location that had preceded the first element in the unreversed multiset).

ComentariosRemarks

rend se usa con un conjunto múltiple invertido igual que end se usa con un conjunto múltiple.rend is used with a reversed multiset just as end is used with a multiset.

Si el valor devuelto de rend se asigna a un const_reverse_iterator , el objeto MultiSet no se puede modificar.If the return value of rend is assigned to a const_reverse_iterator, then the multiset object can't be modified. Si el valor devuelto de rend se asigna a un reverse_iterator, el objeto del conjunto múltiple puede modificarse.If the return value of rend is assigned to a reverse_iterator, then the multiset object can be modified.

Se puede usar rend para comprobar si un iterador inverso ha llegado al final de su conjunto múltiple.rend can be used to test to whether a reverse iterator has reached the end of its multiset.

El valor devuelto por no rend se debe desreferenciar.The value returned by rend shouldn't be dereferenced.

EjemploExample

// multiset_rend.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main() {
   using namespace std;
   multiset <int> ms1;
   multiset <int>::iterator ms1_Iter;
   multiset <int>::reverse_iterator ms1_rIter;
   multiset <int>::const_reverse_iterator ms1_crIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   ms1_rIter = ms1.rend( ) ;
   ms1_rIter--;
   cout << "The last element in the reversed multiset is "
        << *ms1_rIter << "." << endl;

   // end can be used to terminate an iteration
   // through a multiset in a forward order
   cout << "The multiset is: ";
   for ( ms1_Iter = ms1.begin( ) ; ms1_Iter != ms1.end( ); ms1_Iter++ )
      cout << *ms1_Iter << " ";
   cout << "." << endl;

   // rend can be used to terminate an iteration
   // through a multiset in a reverse order
   cout << "The reversed multiset is: ";
   for ( ms1_rIter = ms1.rbegin( ) ; ms1_rIter != ms1.rend( ); ms1_rIter++ )
      cout << *ms1_rIter << " ";
   cout << "." << endl;

   ms1_rIter = ms1.rend( );
   ms1_rIter--;
   ms1.erase ( *ms1_rIter );

   ms1_rIter = ms1.rend( );
   --ms1_rIter;
   cout << "After the erasure, the last element in the "
        << "reversed multiset is " << *ms1_rIter << "." << endl;
}

MultiSet:: reverse_iteratormultiset::reverse_iterator

Un tipo que proporciona un iterador bidireccional que puede leer o modificar un elemento en un conjunto múltiple invertido.A type that provides a bidirectional iterator that can read or modify an element in a reversed multiset.

typedef std::reverse_iterator<iterator> reverse_iterator;

ComentariosRemarks

Un tipo reverse_iterator se usa para recorrer en iteración el conjunto múltiple en orden inverso.A type reverse_iterator is used to iterate through the multiset in reverse.

EjemploExample

Vea el ejemplo de rbegin para obtener un ejemplo de cómo declarar y usar reverse_iterator.See example for rbegin for an example of how to declare and use reverse_iterator.

MultiSet:: Sizemultiset::size

Devuelve el número de elementos del conjunto múltiple.Returns the number of elements in the multiset.

size_type size() const;

Valor devueltoReturn Value

La longitud actual del mapa múltiple.The current length of the multiset.

EjemploExample

// multiset_size.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int> :: size_type i;

   ms1.insert( 1 );
   i = ms1.size( );
   cout << "The multiset length is " << i << "." << endl;

   ms1.insert( 2 );
   i = ms1.size( );
   cout << "The multiset length is now " << i << "." << endl;
}
The multiset length is 1.
The multiset length is now 2.

MultiSet:: size_typemultiset::size_type

Un tipo entero sin signo que puede representar el número de elementos de un conjunto múltiple.An unsigned integer type that can represent the number of elements in a multiset.

typedef typename allocator_type::size_type size_type;

EjemploExample

Vea el ejemplo de size para obtener un ejemplo de cómo declarar y usar size_type.See example for size for an example of how to declare and use size_type

MultiSet:: swapmultiset::swap

Intercambia los elementos de dos conjuntos múltiples.Exchanges the elements of two multisets.

void swap(
    multiset<Key, Compare, Allocator>& right);

ParámetrosParameters

correctaright
El conjunto múltiple de argumentos que proporciona los elementos que se van a intercambiar con el conjunto múltiple de destino.The argument multiset providing the elements to be swapped with the target multiset.

ComentariosRemarks

La función miembro no invalida ninguna referencia, puntero o iterador que designan los elementos de los dos conjuntos múltiples cuyos elementos se intercambian.The member function invalidates no references, pointers, or iterators that designate elements in the two multisets whose elements are being exchanged.

EjemploExample

// multiset_swap.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   multiset <int> ms1, ms2, ms3;
   multiset <int>::iterator ms1_Iter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );
   ms2.insert( 100 );
   ms2.insert( 200 );
   ms3.insert( 300 );

   cout << "The original multiset ms1 is:";
   for ( ms1_Iter = ms1.begin( ); ms1_Iter != ms1.end( ); ms1_Iter++ )
      cout << " " << *ms1_Iter;
   cout << "." << endl;

   // This is the member function version of swap
   ms1.swap( ms2 );

   cout << "After swapping with ms2, list ms1 is:";
   for ( ms1_Iter = ms1.begin( ); ms1_Iter != ms1.end( ); ms1_Iter++ )
      cout << " " << *ms1_Iter;
   cout << "." << endl;

   // This is the specialized template version of swap
   swap( ms1, ms3 );

   cout << "After swapping with ms3, list ms1 is:";
   for ( ms1_Iter = ms1.begin( ); ms1_Iter != ms1.end( ); ms1_Iter++ )
      cout << " " << *ms1_Iter;
   cout   << "." << endl;
}
The original multiset ms1 is: 10 20 30.
After swapping with ms2, list ms1 is: 100 200.
After swapping with ms3, list ms1 is: 300.

MultiSet:: upper_boundmultiset::upper_bound

Devuelve un iterador al primer elemento de un conjunto múltiple con un valor de clave que es mayor que una clave especificada.Returns an iterator to the first element in a multiset with a key that is greater than a specified key.

const_iterator upper_bound(const Key& key) const;

iterator upper_bound(const Key& key);

ParámetrosParameters

clavekey
La clave de argumento que se comparará con la clave de ordenación de un elemento del conjunto múltiple que se está buscando.The argument key to be compared with the sort key of an element from the multiset being searched.

Valor devueltoReturn Value

Un iterador o const_iterator que se dirige a la ubicación de un elemento de un conjunto múltiple que tiene una clave mayor que la clave de argumento o que se dirige a la ubicación siguiente al último elemento del conjunto múltiple si no se encuentra ninguna coincidencia con la clave.An iterator or const_iterator that addresses the location of an element in a multiset with a key that is greater than the argument key, or that addresses the location succeeding the last element in the multiset if no match is found for the key.

EjemploExample

// multiset_upper_bound.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int> :: const_iterator ms1_AcIter, ms1_RcIter;

   ms1.insert( 10 );
   ms1.insert( 20 );
   ms1.insert( 30 );

   ms1_RcIter = ms1.upper_bound( 20 );
   cout << "The first element of multiset ms1 with a key greater "
           << "than 20 is: " << *ms1_RcIter << "." << endl;

   ms1_RcIter = ms1.upper_bound( 30 );

   // If no match is found for the key, end( ) is returned
   if ( ms1_RcIter == ms1.end( ) )
      cout << "The multiset ms1 doesn't have an element "
              << "with a key greater than 30." << endl;
   else
      cout << "The element of multiset ms1 with a key > 40 is: "
           << *ms1_RcIter << "." << endl;

   // The element at a specific location in the multiset can be
   // found using a dereferenced iterator addressing the location
   ms1_AcIter = ms1.begin( );
   ms1_RcIter = ms1.upper_bound( *ms1_AcIter );
   cout << "The first element of ms1 with a key greater than"
        << endl << "that of the initial element of ms1 is: "
        << *ms1_RcIter << "." << endl;
}
The first element of multiset ms1 with a key greater than 20 is: 30.
The multiset ms1 doesn't have an element with a key greater than 30.
The first element of ms1 with a key greater than
that of the initial element of ms1 is: 20.

MultiSet:: value_compmultiset::value_comp

Recupera una copia del objeto de comparación usado para ordenar valores de elemento de un conjunto múltiple.Retrieves a copy of the comparison object used to order element values in a multiset.

value_compare value_comp() const;

Valor devueltoReturn Value

Devuelve el objeto de función que usa un conjunto múltiple para ordenar sus elementos, que es el parámetro de plantilla Compare.Returns the function object that a multiset uses to order its elements, which is the template parameter Compare.

Para obtener más información sobre Compare, vea la sección Comentarios del tema multiset (Clase).For more information on Compare, see the Remarks section of the multiset Class topic.

ComentariosRemarks

El objeto almacenado define la función miembro:The stored object defines the member function:

bool operator( const Key&_xVal, const Key&_yVal);bool operator( const Key&_xVal, const Key&_yVal);

que devuelve true si _xVal precede y no es igual a _yVal en el criterio de ordenación.which returns true if _xVal precedes and isn't equal to _yVal in the sort order.

Tanto key_compare como value_compare son sinónimos para el parámetro de plantilla Compare .Both key_compare and value_compare are synonyms for the template parameter Compare. Ambos tipos se proporcionan para las clases set y MultiSet, donde son idénticos, para la compatibilidad con las clases Map y Multimap, donde son distintos.Both types are provided for the classes set and multiset, where they're identical, for compatibility with the classes map and multimap, where they're distinct.

EjemploExample

// multiset_value_comp.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;

   multiset <int, less<int> > ms1;
   multiset <int, less<int> >::value_compare vc1 = ms1.value_comp( );
   bool result1 = vc1( 2, 3 );
   if( result1 == true )
   {
      cout << "vc1( 2,3 ) returns value of true, "
           << "where vc1 is the function object of ms1."
           << endl;
   }
   else
   {
      cout << "vc1( 2,3 ) returns value of false, "
           << "where vc1 is the function object of ms1."
           << endl;
   }

   set <int, greater<int> > ms2;
   set<int, greater<int> >::value_compare vc2 = ms2.value_comp( );
   bool result2 = vc2( 2, 3 );
   if( result2 == true )
   {
      cout << "vc2( 2,3 ) returns value of true, "
           << "where vc2 is the function object of ms2."
           << endl;
   }
   else
   {
      cout << "vc2( 2,3 ) returns value of false, "
           << "where vc2 is the function object of ms2."
           << endl;
   }
}
vc1( 2,3 ) returns value of true, where vc1 is the function object of ms1.
vc2( 2,3 ) returns value of false, where vc2 is the function object of ms2.

MultiSet:: value_comparemultiset::value_compare

El tipo que proporciona un objeto de función que puede comparar dos claves de ordenación para determinar su orden relativo en el conjunto múltiple.The type that provides a function object that can compare two sort keys to determine their relative order in the multiset.

typedef key_compare value_compare;

ComentariosRemarks

value_compare es un sinónimo del parámetro de plantilla Compare.value_compare is a synonym for the template parameter Compare.

Ambos key_compare y value_compare son sinónimos para el parámetro de plantilla Compare .Both key_compare and value_compare are synonyms for the template parameter Compare. Ambos tipos se proporcionan para las clases set y MultiSet, donde son idénticos, para la compatibilidad con las clases Map y Multimap, donde son distintos.Both types are provided for the classes set and multiset, where they're identical, for compatibility with the classes map and multimap, where they're distinct.

Para obtener más información sobre Compare, vea la sección Comentarios del tema multiset (Clase).For more information on Compare, see the Remarks section of the multiset Class topic.

EjemploExample

Vea el ejemplo de value_comp para ver cómo se declara y usa value_compare.See the example for value_comp for an example of how to declare and use value_compare.

MultiSet:: value_typemultiset::value_type

Un tipo que describe un objeto almacenado como un elemento de un conjunto múltiple en su capacidad como valor.A type that describes an object stored as an element as a multiset in its capacity as a value.

typedef Key value_type;

ComentariosRemarks

value_type es un sinónimo del parámetro de plantilla Key.value_type is a synonym for the template parameter Key.

Ambos key_type y value_type son sinónimos para el parámetro de plantilla Key .Both key_type and value_type are synonyms for the template parameter Key. Ambos tipos se proporcionan para las clases set y MultiSet, donde son idénticos, para la compatibilidad con las clases Map y Multimap, donde son distintos.Both types are provided for the classes set and multiset, where they're identical, for compatibility with the classes map and multimap, where they're distinct.

Para obtener más información sobre Key, vea la sección Comentarios del tema.For more information on Key, see the Remarks section of the topic.

EjemploExample

// multiset_value_type.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   multiset <int> ms1;
   multiset <int>::iterator ms1_Iter;

   multiset <int> :: value_type svt_Int;   // Declare value_type
   svt_Int = 10;             // Initialize value_type

   multiset <int> :: key_type skt_Int;   // Declare key_type
   skt_Int = 20;             // Initialize key_type

   ms1.insert( svt_Int );         // Insert value into s1
   ms1.insert( skt_Int );         // Insert key into s1

   // A multiset accepts key_types or value_types as elements
   cout << "The multiset has elements:";
   for ( ms1_Iter = ms1.begin( ) ; ms1_Iter != ms1.end( ); ms1_Iter++ )
      cout << " " << *ms1_Iter;
   cout << "." << endl;
}
The multiset has elements: 10 20.

Consulte tambiénSee also

ContainerContainers
Seguridad para subprocesos en la biblioteca estándar de C++Thread Safety in the C++ Standard Library
Referencia de la biblioteca estándar de C++C++ Standard Library Reference