std::search se define en el archivo de encabezado <algorithm> y se usa para averiguar la presencia de una subsecuencia que satisface una condición (igualdad si no se define dicho predicado) con respecto a otra secuencia.
- Busca en la secuencia [first1, last1) la primera ocurrencia de la subsecuencia definida por [first2, last2), y devuelve un iterador a su primer elemento de la ocurrencia, o last1 si no se encuentran ocurrencias.
- Compara los elementos en ambos rangos secuencialmente usando operator== (versión 1) o en base a cualquier predicado dado (versión 2). Una subsecuencia de [first1, last1) se considera una coincidencia solo cuando esto es cierto para todos los elementos de [first2, last2). Finalmente, std::search devuelve la primera de tales ocurrencias.
Se puede utilizar en cualquiera de las dos versiones, como se muestra a continuación:
- Para comparar elementos usando == :
Búsqueda de ForwardIterator1 (ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator2 last2);
first1: reenvía
el iterador al principio del primer contenedor en el que se buscará.
last1: reenvía
el iterador hasta el final del primer contenedor en el que se buscará.
first2: reenvía
el iterador al principio de la subsecuencia del segundo contenedor que se va a buscar.
last2: reenvía
el iterador al final de la subsecuencia del segundo contenedor que se va a buscar.Devuelve: un iterador al primer elemento de la
primera ocurrencia de [first2, last2) en [first1, last1), o last1
si no se encuentran ocurrencias.CPP
// C++ program to demonstrate the use of std::search
#include <iostream>
#include <vector>
#include <algorithm>
using
namespace
std;
int
main()
{
int
i, j;
// Declaring the sequence to be searched into
vector<
int
> v1 = { 1, 2, 3, 4, 5, 6, 7 };
// Declaring the subsequence to be searched for
vector<
int
> v2 = { 3, 4, 5 };
// Declaring an iterator for storing the returning pointer
vector<
int
>::iterator i1;
// Using std::search and storing the result in
// iterator i1
i1 = std::search(v1.begin(), v1.end(), v2.begin(), v2.end());
// checking if iterator i1 contains end pointer of v1 or not
if
(i1 != v1.end()) {
cout <<
"vector2 is present at index "
<< (i1 - v1.begin());
}
else
{
cout <<
"vector2 is not present in vector1"
;
}
return
0;
}
Producción:
vector2 is present at index 2
- Para la comparación basada en un predicado (o condición):
Búsqueda de ForwardIterator1 (ForwardIterator1 first1, ForwardIterator1 last1,
ForwardIterator2 first2, ForwardIterator2 last2,
BinaryPredicate pred);Todos los argumentos son iguales a la plantilla anterior, solo se agrega un argumento más
pred: Función binaria que acepta dos elementos como argumentos (uno de cada uno de los dos contenedores, en el mismo orden), y devuelve un valor convertible a bool. El valor devuelto indica si se considera que los elementos coinciden en el contexto de esta función. La función no modificará ninguno de sus argumentos. Puede ser un puntero de función o un objeto de función.
Devuelve: un iterador, al primer elemento de la primera ocurrencia de [first2, last2) que satisface un predicado, en [first1, last1), o last1 si no se encuentran ocurrencias.
CPP
// C++ program to demonstrate the use of std::search
// with binary predicate
#include <iostream>
#include <vector>
#include <algorithm>
using
namespace
std;
// Defining the BinaryPredicate function
bool
pred(
int
i,
int
j)
{
if
(i > j) {
return
1;
}
else
{
return
0;
}
}
int
main()
{
int
i, j;
// Declaring the sequence to be searched into
vector<
int
> v1 = { 1, 2, 3, 4, 5, 6, 7 };
// Declaring the subsequence to be compared to based
// on predicate
vector<
int
> v2 = { 3, 4, 5 };
// Declaring an iterator for storing the returning pointer
vector<
int
>::iterator i1;
// Using std::search and storing the result in
// iterator i1 based on predicate pred
i1 = std::search(v1.begin(), v1.end(), v2.begin(), v2.end(), pred);
// checking if iterator i1 contains end pointer of v1 or not
if
(i1 != v1.end()) {
cout <<
"vector1 elements are greater than vector2 starting "
<<
"from position "
<< (i1 - v1.begin());
}
else
{
cout <<
"vector1 elements are not greater than vector2 "
<<
"elements consecutively."
;
}
return
0;
}
Producción:
vector1 elements are greater than vector2 starting from position 3
Artículos relacionados:
- estándar::búsqueda_n
- estándar::buscar
- estándar::buscar_si, estándar::buscar_si_no
- std::nésimo_elemento
- estándar::find_end
Este artículo es una contribución de Mrigendra Singh . Si le gusta GeeksforGeeks y le gustaría contribuir, también puede escribir un artículo usando contribuya.geeksforgeeks.org o envíe su artículo por correo a contribuya@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA