std::is_permutation
|
|
Esta página se ha traducido por ordenador/computador/computadora de la versión en inglés de la Wiki usando Google Translate.
La traducción puede contener errores y palabras aparatosas/incorrectas. Planea sobre el texto para ver la versión original. Puedes ayudar a corregir los errores y mejorar la traducción. Para instrucciones haz clic aquí. |
| Definido en el archivo de encabezado <algorithm>
|
||
template< class ForwardIt1, class ForwardIt2 > bool is_permutation( ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first ); |
(1) | (desde C++11) |
template< class ForwardIt1, class ForwardIt2, class BinaryPredicate > bool is_permutation( ForwardIt1 first, ForwardIt1 last, ForwardIt2 d_first, BinaryPredicate p ); |
(2) | (desde C++11) |
true si existe una permutación de los elementos en el rango [first1, last1) que hace que rango igual al rango de principio a d_first. La primera versión utiliza operator== por la igualdad, la segunda versión utiliza el p predicado binariotrue if there exists a permutation of the elements in the range [first1, last1) that makes that range equal to the range beginning at d_first. The first version uses operator== for equality, the second version uses the binary predicate pYou can help to correct and verify the translation. Click here for instructions.
Parámetros
| first, last | - | el intervalo de elementos para comparar
Original: the range of elements to compare The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| d_first | - | el comienzo de la segunda gama de comparar
Original: the beginning of the second range to compare The text has been machine-translated via Google Translate. You can help to correct and verify the translation. Click here for instructions. |
| p | - | Predicado binario que devuelve true si los elementos deben tratarse como iguales. La signatura de la función predicado deberá ser equivalente a la siguiente:
Mientras que la signatura no necesita tener |
| Requisitos de tipo | ||
-ForwardIt1, ForwardIt2 debe reunir los requerimientos de ForwardIterator.
| ||
Valor de retorno
true si la [first, last) rango es una permutación del rango de principio a d_first .true if the range [first, last) is a permutation of the range beginning at d_first.You can help to correct and verify the translation. Click here for instructions.
Complejidad
N=std::distance(first, last) donde .N=std::distance(first, last).You can help to correct and verify the translation. Click here for instructions.
Posible implementación
template<class ForwardIt1, class ForwardIt2>
bool is_permutation(ForwardIt1 first, ForwardIt1 last,
ForwardIt2 d_first)
{
// skip common prefix
std::tie(first, d_first) = std::mismatch(first, last, d_first);
// iterate over the rest, counting how many times each element
// from [first, last) appears in [d_first, d_last)
if (first != last) {
ForwardIt2 d_last = d_first;
std::advance(d_last, std::distance(first, last));
for (ForwardIt1 i = first; i != last; ++i) {
if (i != std::find(first, i, *i)) continue; // already counted this *i
auto m = std::count(d_first, d_last, *i);
if (m==0 || std::count(i, last, *i) != m) {
return false;
}
}
}
return true;
}
|
Ejemplo
#include <algorithm>
#include <vector>
#include <iostream>
int main()
{
std::vector<int> v1{1,2,3,4,5};
std::vector<int> v2{3,5,4,1,2};
std::cout << "3,5,4,1,2 is a permutation of 1,2,3,4,5? "
<< std::boolalpha
<< std::is_permutation(v1.begin(), v1.end(), v2.begin()) << '\n';
std::vector<int> v3{3,5,4,1,1};
std::cout << "3,5,4,1,1 is a permutation of 1,2,3,4,5? "
<< std::boolalpha
<< std::is_permutation(v1.begin(), v1.end(), v3.begin()) << '\n';
}
Salida:
3,5,4,1,2 is a permutation of 1,2,3,4,5? true
3,5,4,1,1 is a permutation of 1,2,3,4,5? false
Ver también
| Genera la siguiente permutación lexicográfica mayor de un rango de elementos. (plantilla de función) | |
| genera la siguiente permutación lexicográfica menor de un rango de elementos. (plantilla de función) |