std::boyer_moore_searcher
| Definiert in der Header-Datei <functional> |
||
| template< class RandomIt1, class Hash = std::hash<typename std::iterator_traits<RandomIt1>::value_type>, |
(seit C++17) | |
Ein Sucher, der mit der Searcher-Überladung von std::search verwendet werden kann und den Boyer-Moore-Stringsuchalgorithmus implementiert.
std::boyer_moore_searcher ist CopyConstructible und CopyAssignable.
RandomIt1 muss die Anforderungen an einen LegacyRandomAccessIterator erfüllen.
Inhalt |
[bearbeiten] Member functions
std::boyer_moore_searcher::boyer_moore_searcher
| boyer_moore_searcher( RandomIt1 pat_first, RandomIt1 pat_last, |
||
Konstruiert einen std::boyer_moore_searcher, indem Kopien von pat_first, pat_last, hf und pred gespeichert werden und alle notwendigen internen Datenstrukturen eingerichtet werden.
Der Werttyp von RandomIt1 muss DefaultConstructible, CopyConstructible und CopyAssignable sein.
Für zwei beliebige Werte A und B vom Typ std::iterator_traits<RandomIt1>::value_type muss gelten: Wenn pred(A, B) == true, dann muss hf(A) == hf(B) true sein.
Parameter
| pat_first, pat_last | - | ein Iteratorpaar, das die zu suchende Zeichenkette bezeichnet |
| hf | - | ein aufrufbares Objekt, das zum Hashing der Elemente des Strings verwendet wird |
| pred | - | ein aufrufbares Objekt, das zur Bestimmung der Gleichheit verwendet wird |
Ausnahmen
Alle Ausnahmen, die von
- dem Kopierkonstruktor von
RandomIt1; - dem Standardkonstruktor, Kopierkonstruktor und Kopierzuweisungsoperator des Werttyps von
RandomIt1; oder - dem Kopierkonstruktor und dem Funktionsaufrufoperator von
BinaryPredicateoderHashgeworfen werden.
Kann auch std::bad_alloc auslösen, wenn zusätzlicher Speicher für interne Datenstrukturen nicht alloziert werden kann.
std::boyer_moore_searcher::operator()
| template< class RandomIt2 > std::pair<RandomIt2, RandomIt2> operator()( RandomIt2 first, RandomIt2 last ) const; |
(seit C++17) | |
Die Memberfunktion, die von der Searcher-Überladung von std::search aufgerufen wird, um eine Suche mit diesem Sucher durchzuführen. RandomIt2 muss die Anforderungen an einen LegacyRandomAccessIterator erfüllen.
RandomIt1 und RandomIt2 müssen denselben Werttyp haben.
Parameter
| first, last | - | ein Iteratorpaar, das die zu untersuchende Zeichenkette bezeichnet |
Rückgabewert
Wenn das Muster [pat_first, pat_last) leer ist, wird std::make_pair(first, first) zurückgegeben.
Andernfalls wird ein Paar von Iteratoren auf die erste und die eine nach der letzten Position in [first, last) zurückgegeben, wo eine Untersequenz gefunden wird, die gleich [pat_first, pat_last) gemäß Definition durch pred ist, oder andernfalls std::make_pair(last, last).
[bearbeiten] Notes
| Feature-Test-Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_boyer_moore_searcher |
201603L |
(C++17) | Sucher |
[bearbeiten] Example
#include <algorithm> #include <functional> #include <iomanip> #include <iostream> #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 << "The string " << std::quoted(needle) << " found at offset " << it - haystack.begin() << '\n'; else std::cout << "The string " << std::quoted(needle) << " not found\n"; }
Ausgabe
The string "pisci" found at offset 43
[bearbeiten] See also
| Sucht nach dem ersten Vorkommen eines Elementbereichs (Funktionstempelat) | |
| (C++17) |
Implementierung des standardmäßigen C++-Bibliotheks-Suchalgorithmus (Klassen-Template) |
| Implementierung des Boyer-Moore-Horspool-Suchalgorithmus (Klassen-Template) |