std::hive<T,Allocator>::unique
template< class BinaryPredicate = std::equal_to<T> >
size_type unique( BinaryPredicate binary_pred = BinaryPredicate() );
|
(desde C++26) | |
Elimina todos los elementos duplicados consecutivos del contenedor. Solo se deja el primer elemento en cada grupo de elementos iguales.
Más formalmente, para un hive no vacío, borra todos los elementos referidos por el iterador i en el [begin() + 1, end()) para los cuales p(*i, *(i - 1)) es verdadero.
Invalida referencias, punteros e iteradores que se refieran a los elementos borrados.
Si el último elemento en *this es borrado, también invalida el iterador pasado-el-final.
El comportamiento no está definido si el comparador correspondiente no establece una relación de equivalencia.
Parámetros
| p | - | predicado binario que devuelve true si los elementos deben ser tratados como iguales. La firma de la función predicado debe ser equivalente a lo siguiente:
Si bien la firma no necesita tener |
| Requisitos de tipo | ||
-BinaryPredicate debe cumplir los requisitos de BinaryPredicate.
| ||
Valor de retorno
El número de elementos eliminados.
Complejidad
Si empty() es true, no se realiza ninguna comparación.
De lo contrario, dado N como std::distance(begin(), end()):
exactamente N-1 aplicaciones del predicado p.
Ejemplo
#include <iostream>
#include <hive>
std::ostream& operator<< (std::ostream& os, const std::hive<int>& container)
{
for (int val : container)
os << val << ' ';
return os << '\n';
}
int main()
{
std::hive<int> c{1, 2, 2, 3, 3, 2, 1, 1, 2};
std::cout << "Before unique(): " << c;
const auto count1 = c.unique();
std::cout << "After unique(): " << c
<< count1 << " elements were removed\n";
c = {1, 2, 12, 23, 3, 2, 51, 1, 2, 2};
std::cout << "\nBefore unique(pred): " << c;
const auto count2 = c.unique([mod = 10](int x, int y)
{
return (x % mod) == (y % mod);
});
std::cout << "After unique(pred): " << c
<< count2 << " elements were removed\n";
}
Salida:
Before unique(): 1 2 2 3 3 2 1 1 2
After unique(): 1 2 3 2 1 2
3 elements were removed
Before unique(pred): 1 2 12 23 3 2 51 1 2 2
After unique(pred): 1 2 23 2 51 2
4 elements were removed
Véase también
| elimina elementos duplicados consecutivos en un rango (plantilla de función & objeto de función de algoritmo) | |
(C++20) |