名前空間
変種
操作

std::boyer_moore_searcher

提供: cppreference.com
< cpp‎ | utility‎ | functional
 
 
ユーティリティライブラリ
汎用ユーティリティ
日付と時間
関数オブジェクト
書式化ライブラリ (C++20)
(C++11)
関係演算子 (C++20で非推奨)
整数比較関数
(C++20)
スワップと型操作
(C++14)
(C++11)
(C++11)
(C++11)
(C++17)
一般的な語彙の型
(C++11)
(C++17)
(C++17)
(C++17)
(C++17)

初等文字列変換
(C++17)
(C++17)
 
関数オブジェクト
関数ラッパー
(C++11)
(C++11)
関数の部分適用
(C++20)
(C++11)
関数呼び出し
(C++17)
恒等関数オブジェクト
(C++20)
参照ラッパー
(C++11)(C++11)
演算子ラッパー
否定子
(C++17)
検索子
boyer_moore_searcher
(C++17)
制約付き比較子
古いバインダとアダプタ
(C++17未満)
(C++17未満)
(C++17未満)
(C++17未満)
(C++17未満)(C++17未満)(C++17未満)(C++17未満)
(C++20未満)
(C++20未満)
(C++17未満)(C++17未満)
(C++17未満)(C++17未満)

(C++17未満)
(C++17未満)(C++17未満)(C++17未満)(C++17未満)
(C++20未満)
(C++20未満)
 
ヘッダ <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::searchSearcher オーバーロードで使用するのに適したクラス。

boyer_moore_searcherCopyConstructible かつ CopyAssignable です。

RandomIt1LegacyRandomAccessIterator の要件を満たさなければなりません。

目次

[編集] メンバ関数

std::boyer_moore_searcher::boyer_moore_searcher

boyer_moore_searcher( RandomIt1 pat_first,

                      RandomIt1 pat_last,
                      Hash hf = Hash(),

                      BinaryPredicate pred = BinaryPredicate());

pat_firstpat_lasthf および 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 オーバーロードによって呼ばれるメンバ関数。 RandomIt2LegacyRandomAccessIterator の要件を満たさなければなりません。

RandomIt1RandomIt2 は同じ値型を持たなければなりません。

引数

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

[編集] 関連項目

指定範囲の要素に対して検索を行います
(関数テンプレート) [edit]