std::forward_list::merge
void merge( forward_list& other );
|
(1) | (desde C++11) |
void merge( forward_list&& other );
|
(1) | (desde C++11) |
template <class Compare>
void merge( forward_list& other, Compare comp );
|
(2) | (desde C++11) |
template <class Compare>
void merge( forward_list&& other, Compare comp );
|
(2) | (desde C++11) |
Fusiona dos listas ordenadas en una. Las listas deben ordenarse en orden ascendente.
No se copian elementos. El contenedor other queda vacío después de la operación. La función no hace nada si other se refiere al mismo objeto que *this. Si get_allocator() != Other.get_allocator(), el comportamiento no está definido. Ningún iterador o referencia se invalida, excepto que los iteradores de elementos movidos ahora se refieren a *this, no a other. La primera versión usa operator< para comparar los elementos, la segunda versión usa la función de comparación dada comp.
Esta operación es estable: para elementos equivalentes en las dos listas, los elementos de * this siempre precederán a los elementos de other, y el orden de los elementos equivalentes de * this y other no cambia.
Parámetros
| other | - | El otro contenedor a fusionar. |
| comp | - | Objeto función de comparación (es decir, un objeto que satisface los requisitos de Compare) que devuelve true si el primer argumento es menor (es decir, se ordena antes) que el segundo. La signatura de la función de comparación debe ser equivalente a la siguiente:
Si bien la signatura no necesita tener |
Valor de retorno
(Ninguno)
Excepciones
Si se lanza una excepción, esta función no tiene ningún efecto (garantía de excepción fuerte), excepto si la excepción proviene de la función de comparación.
Complejidad
A lo sumo std::distance(begin(), end()) + std::distance(other.begin(), other.end()) - 1 comparaciones.
Ejemplo
#include <iostream>
#include <forward_list>
std::ostream& operator<<(std::ostream& ostr, const std::forward_list<int>& list)
{
for (const auto &i : list) {
ostr << ' ' << i;
}
return ostr;
}
int main()
{
std::forward_list<int> lista1 = {5, 9, 1, 3, 3};
std::forward_list<int> lista2 = {8, 7, 2, 3, 4, 4};
lista1.sort();
lista2.sort();
std::cout << "lista1: " << lista1 << '\n';
std::cout << "lista2: " << lista2 << '\n';
lista1.merge(lista2);
std::cout << "fusionadas: " << lista1 << '\n';
}
Salida:
lista1: 1 3 3 5 9
lista2: 2 3 4 4 7 8
fusionadas: 1 2 3 3 3 4 4 5 7 8 9
Véase también
(C++11) |
Mueve elementos de otro contenedor forward_list. (función miembro pública) |
| Fusiona dos rangos ordenados. (plantilla de función) | |
| Fusiona dos rangos ordenados in situ. (plantilla de función) | |
(C++20) |
Fusiona dos rangos ordenados (niebloid) |
(C++20) |
Fusiona dos rangos ordenados in situ. (niebloid) |