std::partial_sort_copy
De cppreference.com
<tbody>
</tbody>
| Definido en el archivo de encabezado <algorithm>
|
||
template< class InputIt, class RandomIt > RandomIt partial_sort_copy( InputIt first, InputIt last, RandomIt d_first, RandomIt d_last ); |
(1) | |
template< class InputIt, class RandomIt, class Compare > RandomIt partial_sort_copy( InputIt first, InputIt last, RandomIt d_first, RandomIt d_last, Compare comp ); |
(2) | |
Ordena de algunos de los elementos en el rango
[first, last) en orden ascendente. En la mayoría d_first - d_last de los elementos se mueven a la [d_first, d_first + n) rango y luego ordenados. n es el número de elementos a ordenar (n = min(last - first, d_last - d_first)). El orden de los elementos iguales no se garantiza que se mantendrá. La primera versión utiliza operator< para comparar los elementos, la segunda versión utiliza la función de comparación dado comp .Original:
Sorts some of the elements in the range
[first, last) in ascending order. At most d_first - d_last of the elements are moved to the range [d_first, d_first + n) and then sorted. n is the number of elements to sort (n = min(last - first, d_last - d_first)). The order of equal elements is not guaranteed to be preserved. The first version uses operator< to compare the elements, the second version uses the given comparison function comp.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Parámetros
| first, last | - | la gama de elementos a ordenar
Original: the range of elements to sort The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| d_first, d_last | - | iteradores de acceso aleatorio que definen el rango de destino
Original: random access iterators defining the destination range The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| comp | - | objeto función de comparación (es decir, un objeto que satisface los requerimientos de Compare) que devuelve true si el primer argumento es menor que el segundo. La signatura de la función de comparación deberá ser equivalente a lo siguiente:
Mientras que la signatura no necesita ser |
| Requisitos de tipo | ||
-InputIt debe reunir los requerimientos de InputIterator.
| ||
-RandomIt debe reunir los requerimientos de ValueSwappable y RandomAccessIterator.
| ||
-The type of dereferenced RandomIt must meet the requirements of MoveAssignable and MoveConstructible.
| ||
Valor de retorno
un iterador al elemento que define el límite superior del rango ordenados, es decir
d_first + min(last - first, d_last - d_first) .Original:
an iterator to the element defining the upper boundary of the sorted range, i.e.
d_first + min(last - first, d_last - d_first).The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Complejidad
O(N·log(min(D,N)), donde
N = std::distance(first, last), D = std::distance(d_first, d_last) aplicaciones de cmp .Original:
O(N·log(min(D,N)), where
N = std::distance(first, last), D = std::distance(d_first, d_last) applications of cmp.The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Ejemplo
En el código siguiente un vector de enteros y los copia en una más pequeña y un vector grande .
Original:
The following code sorts an vector of integers and copies them into a smaller and a larger vector.
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.
You can help to correct and verify the translation. Click here for instructions.
Ejecuta este código
#include <algorithm>
#include <vector>
#include <functional>
#include <iostream>
int main()
{
std::vector<int> v0{4, 2, 5, 1, 3};
std::vector<int> v1{10, 11, 12};
std::vector<int> v2{10, 11, 12, 13, 14, 15, 16};
std::vector<int>::iterator it;
it = std::partial_sort_copy(v0.begin(), v0.end(), v1.begin(), v1.end());
std::cout << "Writing to the smaller vector in ascending order gives: ";
for (int a : v1) {
std::cout << a << " ";
}
std::cout << '\n';
if(it == v1.end())
std::cout << "The return value is the end iterator\n";
it = std::partial_sort_copy(v0.begin(), v0.end(), v2.begin(), v2.end(),
std::greater<int>());
std::cout << "Writing to the larger vector in descending order gives: ";
for (int a : v2) {
std::cout << a << " ";
}
std::cout << '\n' << "The return value is the iterator to " << *it << '\n';
}
Salida:
Writing to the smaller vector in ascending order gives: 1 2 3
The return value is the end iterator
Writing to the larger vector in descending order gives: 5 4 3 2 1 15 16
The return value is the iterator to 15
