functional_boyer_moore_horspool_searcher
functional_boyer_moore_horspool_searcher (보이어-무어-호스풀 검색기)
이 페이지는 C++17에서 도입된 std::boyer_moore_horspool_searcher 클래스 템플릿에 대해 설명해요. 이 검색기는 Boyer-Moore-Horspool 문자열 검색 알고리즘을 구현한 것으로, std::search 함수의 Searcher 오버로드와 함께 사용하기에 적합해요. 또한 std::boyer_moore_horspool_searcher는 복사 생성과 복사 할당이 가능해요.
출처: cppreference
본문
개요
<functional> 헤더에 정의됨 |
||
|---|---|---|
template < class RandomIt1 , class Hash = std :: hash < typename std :: iterator_traits < RandomIt1 >:: value_type > , class BinaryPredicate = std :: equal_to <> > class boyer_moore_horspool_searcher ; |
(C++17 이후) |
std::search의 Searcher 오버로드와 함께 사용하기에 적합한 검색기로, Boyer-Moore-Horspool 문자열 검색 알고리즘을 구현해요. std::boyer_moore_horspool_searcher는 CopyConstructible 및 CopyAssignable 요구 사항을 충족해요. RandomIt1은 LegacyRandomAccessIterator 요구 사항을 충족해야 해요.
멤버 함수
std::boyer_moore_horspool_searcher::boyer_moore_horspool_searcher
boyer_moore_horspool_searcher ( RandomIt1 pat_first , RandomIt1 pat_last , Hash hf = Hash (), BinaryPredicate pred = BinaryPredicate () ); |
|---|
pat_first, pat_last, hf, pred의 복사본을 저장하고 필요한 내부 데이터 구조를 설정하여 std::boyer_moore_horspool_searcher를 생성해요. RandomIt1의 value type은 DefaultConstructible, CopyConstructible, CopyAssignable이어야 해요. pred(A, B) == true인 임의의 두 값 A와 B에 대해 hf(A) == hf(B)가 true여야 해요.
매개변수
pat_first, pat_last |
- | 검색할 문자열을 나타내는 반복자 쌍 |
|---|---|---|
hf |
- | 문자열의 요소를 해시하는 데 사용하는 호출 가능한 객체 |
pred |
- | 동등성을 판별하는 데 사용하는 호출 가능한 객체 |
예외
다음에서 던져지는 모든 예외가 전달돼요.
RandomIt1의 복사 생성자RandomIt1의 value type의 기본 생성자, 복사 생성자 또는 복사 할당 연산자BinaryPredicate또는Hash의 복사 생성자 또는 함수 호출 연산자
내부 데이터 구조에 필요한 추가 메모리를 할당할 수 없으면 std::bad_alloc을 던질 수도 있어요.
std::boyer_moore_horspool_searcher::operator()
template < class RandomIt2 > std :: pair < RandomIt2 , RandomIt2 > operator ()( RandomIt2 first , RandomIt2 last ) const ; |
|---|
이 검색기로 검색을 수행하기 위해 std::search의 Searcher 오버로드가 호출하는 멤버 함수예요. RandomIt2는 LegacyRandomAccessIterator 요구 사항을 충족해야 해요. RandomIt1과 RandomIt2는 같은 value type을 가져야 해요.
매개변수
first, last |
- | 검색할 문자열을 나타내는 반복자 쌍 |
|---|
반환값
패턴 [pat_first, pat_last)이 비어 있으면 std::make_pair(first, first)를 반환해요. 그렇지 않으면 [first, last) 범위에서 pred로 정의된 비교로 [pat_first, pat_last)와 동일한 부분 수열이 위치한 첫 번째와 마지막 다음 위치를 가리키는 반복자 쌍을 반환해요. 찾지 못하면 std::make_pair(last, last)를 반환해요.
참고
| 특징-테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_boyer_moore_searcher |
201603L | (C++17) | 검색기 |
예제
#include <algorithm>
#include <functional>
#include <iomanip>
#include <iostream>
#include <string_view>
int main()
{
constexpr std::string_view in =
"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"};
auto it = std::search(in.begin(), in.end(),
std::boyer_moore_horspool_searcher(
needle.begin(), needle.end()));
if (it != in.end())
std::cout << "The string " << std::quoted(needle) << " found at offset "
<< it - in.begin() << '\n';
else
std::cout << "The string " << std::quoted(needle) << " not found\n";
}
출력:
The string "pisci" found at offset 43
같이 보기
search |
요소 범위에서 첫 번째로 나타나는 부분을 검색해요 (함수 템플릿 & 알고리즘 함수 객체) |
|---|---|
ranges::search (C++20) |
|
default_searcher (C++17) |
표준 C++ 라이브러리 검색 알고리즘 구현 (클래스 템플릿) |
boyer_moore_searcher (C++17) |
Boyer-Moore 검색 알고리즘 구현 (클래스 템플릿) |