std::boyer_moore_searcher
| ヘッダ <functional> で定義
|
||
template< class RandomIt1, class Hash = std::hash<typename std::iterator_traits<RandomIt1>::value_type>, class BinaryPredicate = std::equal_to<> > class boyer_moore_searcher; |
(C++17以上) | |
ボイヤー-ムーア文字列検索アルゴリズムを実装する、 std::search の Searcher オーバーロードで使用するのに適したクラス。
boyer_moore_searcher は CopyConstructible かつ CopyAssignable です。
RandomIt1 は LegacyRandomAccessIterator の要件を満たさなければなりません。
メンバ関数
std::boyer_moore_searcher::boyer_moore_searcher
<tbody> </tbody> boyer_moore_searcher( RandomIt1 pat_first, RandomIt1 pat_last, Hash hf = Hash(), BinaryPredicate pred = BinaryPredicate()); |
||
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()
<tbody> </tbody> 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
関連項目
| 指定範囲の要素に対して検索を行います (関数テンプレート) |