std::boyer_moore_searcher
| Definido en el archivo de encabezado <functional>
|
||
template< class RandomIt1, class Hash = std::hash<typename std::iterator_traits<RandomIt1>::value_type>, class BinaryPredicate = std::equal_to<> > class boyer_moore_searcher; |
(desde C++17) | |
Un buscador adecuado para uso con la sobrecarga Searcher de std::search que implementa el algoritmo de búsqueda de cadenas Boyer-Moore.
boyer_moore_searcher es CopyConstructible y CopyAssignable.
RandomIt1 debe cumplir con los requerimientos de RandomAccessIterator.
Funciones miembro
std::boyer_moore_searcher::boyer_moore_searcher
<tbody> </tbody> boyer_moore_searcher( RandomIt1 pat_first, RandomIt1 pat_last, Hash hf = Hash(), BinaryPredicate pred = BinaryPredicate()); |
||
Construye un objeto boyer_moore_searcher almacenando copias de pat_first, pat_last, hf, y pred, configurando las estructuras de datos internas necesarias.
El tipo valor de RandomIt1 debe ser DefaultConstructible, CopyConstructible y CopyAssignable.
Para dos valores cualesquiera A y B del tipo std::iterator_traits<RandomIt1>::value_type, si pred(A, B) == true, entonces hf(A) == hf(B) deberá ser true.
Parámetros
| pat_first, pat_last | - | Un par de iteradores que designan la cadena a buscar. |
| hf | - | Un objeto invocable que se usa para codificar (hash) los elementos de la cadena. |
| pred | - | Un objeto invocable utilizado para determinar la igualdad. |
Excepciones
Cualquier excepción lanzada por
- el constructor de copia de
RandomIt1; - el constructor por defecto, el constructor de copia y el operador de asignación de copia del tipo valor de
RandomIt1; o - el constructor de copia y el operador de llamada de función de
BinaryPredicateoHash.
También puede lanzar std::bad_alloc si no se puede asignar la memoria adicional requerida para las estructuras de datos internas.
std::boyer_moore_searcher::operator()
<tbody> </tbody> template< class RandomIt2 > std::pair<RandomIt2,RandomIt2> operator()( RandomIt2 first, RandomIt2 last ) const; |
(desde C++17) | |
La función miembro llamada por la sobrecarga Searcher de std::search para realizar una búsqueda con este buscador. RandomIt2 debe cumplir con los requerimientos de RandomAccessIterator.
RandomIt1 y RandomIt2 deben tener el mismo tipo valor.
Parámetros
| first, last | - | Un par de iteradores que designan la cadena a examinar. |
Valor de retorno
Si el patrón ([pat_first, pat_last)) está vacío, devuelve std::make_pair(first, first).
De lo contrario, devuelve un par de iteradores a la primera posición y a la posición inmediatamente después de la última en [first, last) donde una subsecuencia que se compara igual a [pat_first, pat_last) según lo definido por pred está ubicada, o std::make_pair(last, last) de lo contrario.
Notas
| Macro de Prueba de característica |
|---|
__cpp_lib_boyer_moore_searcher
|
Ejemplo
#include <iomanip>
#include <iostream>
#include <algorithm>
#include <functional>
#include <string_view>
int main()
{
constexpr std::string_view haystack =
"Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed "
"do eiusmod tempor incididunt ut labore et dolore magna aliqua";
const std::string_view needle {"pisci"};
if (const auto it = std::search(haystack.begin(), haystack.end(),
std::boyer_moore_searcher(needle.begin(), needle.end()));
it != haystack.end()
) {
std::cout << "La cadena " << quoted(needle) << " se encuentra en el desplazamiento "
<< it - haystack.begin() << '\n';
} else {
std::cout << "La cadena " << std::quoted(needle) << " no se encontró\n";
}
}
Salida:
La cadena "pisci" se encuentra en el desplazamiento 43
Véase también
| Busca una subsecuencia de elementos. (plantilla de función) | |
(C++17) |
Implementación del algoritmo de búsqueda de la biblioteca estándar de C++. (plantilla de clase) |
| Implementación del algoritmo de búsqueda Boyer-Moore-Horspool. (plantilla de clase) |