Espacios de nombres
Variantes

std::boyer_moore_searcher

De cppreference.com
 
 
Biblioteca de servicios
 
Objetos función
Envoltorios de funciones
(C++11)
(C++11)
Aplicación parcial de funciones
(C++20)
(C++11)
Invocación de funciones
(C++17)(C++23)
Objeto función identidad
(C++20)
Envoltorios de referencias
(C++11)(C++11)
Envoltorios de operador transparentes
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
(C++14)
Negadores
(C++17)
Buscadores
Comparadores restringidos
Vinculadores y adaptadores antiguos
(hasta C++17)
(hasta C++17)
(hasta C++17)
(hasta C++17)
(hasta C++17)(hasta C++17)(hasta C++17)(hasta C++17)
(hasta C++20)
(hasta C++20)
(hasta C++17)(hasta C++17)
(hasta C++17)(hasta C++17)

(hasta C++17)
(hasta C++17)(hasta C++17)(hasta C++17)(hasta C++17)
(hasta C++20)
(hasta C++20)
 
<tbody> </tbody>
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 BinaryPredicate o Hash.

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) [editar]
Implementación del algoritmo de búsqueda de la biblioteca estándar de C++.
(plantilla de clase) [editar]
Implementación del algoritmo de búsqueda Boyer-Moore-Horspool.
(plantilla de clase) [editar]