std::boyer_moore_searcher
ヘッダ <functional> で定義
|
||
template< class RandomIt1, class Hash = std::hash<typename std::iterator_traits<RandomIt1>::value_type>, |
(C++17以上) | |
ボイヤー-ムーア文字列検索アルゴリズムを実装する、 std::search の Searcher オーバーロードで使用するのに適したクラス。
boyer_moore_searcher
は CopyConstructible かつ CopyAssignable です。
RandomIt1
は LegacyRandomAccessIterator の要件を満たさなければなりません。
目次 |
[編集] メンバ関数
std::boyer_moore_searcher::boyer_moore_searcher
boyer_moore_searcher( RandomIt1 pat_first, RandomIt1 pat_last, |
||
pat_first
、 pat_last
、 hf
および pred
のコピーを格納し、必要なあらゆる内部データ構造をセットアップすることによって、 boyer_moore_searcher
を構築します。
RandomIt1
の値は DefaultConstructible かつ CopyConstructible かつ CopyAssignable でなければなりません。
std::iterator_traits<RandomIt1>::value_type 型の任意の2つの値 A
および B
について、 pred(A, B) == true ならば hf(A) == hf(B) は true
でなければなりません。
引数
pat_first, pat_last | - | 検索する文字列を指定する一組のイテレータ |
hf | - | 文字列の要素をハッシュするために使用される呼び出し可能なオブジェクト |
pred | - | 等しさを判定するために使用される呼び出し可能なオブジェクト |
例外
以下によって投げられるあらゆる例外。
-
RandomIt1
のコピーコンストラクタ。 -
RandomIt1
の値型のデフォルトコンストラクタ、コピーコンストラクタ、コピー代入演算子。 -
BinaryPredicate
およびHash
のコピーコンストラクタおよび関数呼び出し演算子。
内部データ構造のために必要な追加のメモリを確保できない場合は std::bad_alloc を投げるかもしれません。
std::boyer_moore_searcher::operator()
template< class RandomIt2 > std::pair<RandomIt2,RandomIt2> operator()( RandomIt2 first, RandomIt2 last ) const; |
(C++17以上) | |
この検索子を使用して検索を行うために std::search の Searcher オーバーロードによって呼ばれるメンバ関数。 RandomIt2
は LegacyRandomAccessIterator の要件を満たさなければなりません。
RandomIt1
と RandomIt2
は同じ値型を持たなければなりません。
引数
first, last | - | 調べる文字列を指定する一組のイテレータ |
戻り値
パターン ([pat_first, pat_last)) が空の場合は make_pair(first, first)
を返します。
そうでなければ、 pred
によって定義されるところの [pat_first, pat_last) と比較して等しい部分シーケンスが位置する [first, last) 内の先頭と終端の位置を指すイテレータのペア、またはそうでなければ make_pair(last, last)
を返します。
[編集] 例
#include <iostream> #include <string> #include <algorithm> #include <functional> int main() { std::string in = "Lorem ipsum dolor sit amet, consectetur adipiscing elit," " sed do eiusmod tempor incididunt ut labore et dolore magna aliqua"; std::string needle = "pisci"; auto it = std::search(in.begin(), in.end(), std::boyer_moore_searcher( needle.begin(), needle.end())); if(it != in.end()) std::cout << "The string " << needle << " found at offset " << it - in.begin() << '\n'; else std::cout << "The string " << needle << " not found\n"; }
出力:
The string pisci found at offset 43
[編集] 関連項目
指定範囲の要素に対して検索を行います (関数テンプレート) |