Difference between revisions of "cpp/utility/functional/default searcher"
(+) |
m (~) |
||
(17 intermediate revisions by 8 users not shown) | |||
Line 1: | Line 1: | ||
− | {{cpp/title|default_searcher | + | {{cpp/title|default_searcher}} |
− | {{cpp/utility/navbar}} | + | {{cpp/utility/functional/navbar}} |
{{dcl begin}} | {{dcl begin}} | ||
− | {{dcl header | functional }} | + | {{dcl header|functional}} |
− | {{dcl | since=c++17 | | + | {{dcl|since=c++17| |
− | template< class | + | template< class ForwardIt, class BinaryPredicate {{=}} std::equal_to<> > |
class default_searcher; | class default_searcher; | ||
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
− | A class suitable for use with Searcher overload of {{lc|std::search}} that delegates the search operation to the pre-C++17 standard library's {{lc|std::search}}. | + | A class suitable for use with {{named req|Searcher}} overload of {{lc|std::search}} that delegates the search operation to the pre-C++17 standard library's {{lc|std::search}}. |
− | {{tt|default_searcher}} is {{ | + | {{tt|std::default_searcher}} is {{named req|CopyConstructible}} and {{named req|CopyAssignable}}. |
===Member functions=== | ===Member functions=== | ||
− | {{member | {{small|std::default_searcher::}}default_searcher | 2= | + | {{member|{{small|std::default_searcher::}}default_searcher|2= |
{{dcl begin}} | {{dcl begin}} | ||
− | {{ | + | {{dcla|since=c++17|constexpr=c++20|1= |
− | default_searcher( | + | default_searcher( ForwardIt pat_first, |
− | + | ForwardIt pat_last, | |
− | BinaryPredicate pred | + | BinaryPredicate pred = BinaryPredicate() ); |
}} | }} | ||
{{dcl end}} | {{dcl end}} | ||
− | Constructs a {{tt|default_searcher}} by storing copies of {{ | + | Constructs a {{tt|std::default_searcher}} by storing copies of {{c|pat_first}}, {{c|pat_last}}, and {{c|pred}}. |
===Parameters=== | ===Parameters=== | ||
{{par begin}} | {{par begin}} | ||
− | {{par | pat_first, pat_last | a pair of iterators designating the string to be searched for}} | + | {{par|pat_first, pat_last|a pair of iterators designating the string to be searched for}} |
− | {{par | pred | a callable object used to determine equality }} | + | {{par|pred|a callable object used to determine equality}} |
{{par end}} | {{par end}} | ||
===Exceptions=== | ===Exceptions=== | ||
− | Any exceptions thrown by the copy constructors of {{tt|BinaryPredicate}} or {{tt| | + | Any exceptions thrown by the copy constructors of {{tt|BinaryPredicate}} or {{tt|ForwardIt}}. |
}} | }} | ||
− | {{member | {{small|std::default_searcher::}}operator() | 2= | + | {{member|{{small|std::default_searcher::}}operator()|2= |
{{dcl begin}} | {{dcl begin}} | ||
− | {{ | + | {{dcla|since=c++17|constexpr=c++20|1= |
− | + | template< class ForwardIt2 > | |
− | template< class | + | std::pair<ForwardIt2, ForwardIt2> |
− | + | operator()( ForwardIt2 first, ForwardIt2 last ) const; | |
}} | }} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
{{dcl end}} | {{dcl end}} | ||
The member function called by the Searcher overload of {{lc|std::search}} to perform a search with this searcher. | The member function called by the Searcher overload of {{lc|std::search}} to perform a search with this searcher. | ||
− | + | ||
− | + | Returns a pair of iterators {{tt|i, j}}, where {{tt|i}} is {{c|std::search(first, last, pat_first, pat_last, pred)}} and {{tt|j}} is {{c|std::next(i, std::distance(pat_first, pat_last))}} unless {{tt|std::search}} returned {{c|last}} (no match), in which case {{tt|j}} equals {{c|last}} as well. | |
− | + | ||
− | + | ||
− | + | ||
− | Returns a pair of iterators {{tt|i, j}}, where {{tt|i}} is {{c|std::search(first, last, pat_first, pat_last, pred)}} and {{tt|j}} is {{c|std::next(i, std::distance(pat_first, pat_last))}} unless {{tt|std::search}} returned {{ | + | |
− | + | ||
− | + | ||
===Parameters=== | ===Parameters=== | ||
{{par begin}} | {{par begin}} | ||
− | {{par | first, last | a pair of iterators designating the string to be examined}} | + | {{par|first, last|a pair of iterators designating the string to be examined}} |
{{par end}} | {{par end}} | ||
===Return value=== | ===Return value=== | ||
− | + | A pair of iterators to the first and one past last positions in {{range|first|last}} where a subsequence that compares equal to {{range|pat_first|pat_last}} as defined by {{c|pred}} is located, or a pair of copies of {{c|last}} otherwise. | |
− | + | ||
− | + | ||
}} | }} | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
===Example=== | ===Example=== | ||
{{example | {{example | ||
− | + | |code= | |
− | + | ||
− | + | ||
− | + | ||
#include <algorithm> | #include <algorithm> | ||
#include <functional> | #include <functional> | ||
+ | #include <iomanip> | ||
+ | #include <iostream> | ||
+ | #include <string_view> | ||
int main() | int main() | ||
{ | { | ||
− | std:: | + | constexpr std::string_view in = |
− | + | "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed " | |
− | std:: | + | "do eiusmod tempor incididunt ut labore et dolore magna aliqua"; |
+ | |||
+ | const std::string_view needle{"pisci"}; | ||
+ | |||
auto it = std::search(in.begin(), in.end(), | auto it = std::search(in.begin(), in.end(), | ||
− | + | std::default_searcher( | |
− | + | needle.begin(), needle.end())); | |
− | if(it != in.end()) | + | if (it != in.end()) |
− | std::cout << "The string " << needle << " found at offset " | + | std::cout << "The string " << std::quoted(needle) << " found at offset " |
<< it - in.begin() << '\n'; | << it - in.begin() << '\n'; | ||
else | else | ||
− | std::cout << "The string " << needle << " not found\n"; | + | std::cout << "The string " << std::quoted(needle) << " not found\n"; |
} | } | ||
|output= | |output= | ||
− | The string pisci found at offset 43 | + | The string "pisci" found at offset 43 |
}} | }} | ||
===See also=== | ===See also=== | ||
{{dsc begin}} | {{dsc begin}} | ||
− | {{dsc inc | cpp/algorithm/dsc search}} | + | {{dsc inc|cpp/algorithm/dsc search}} |
+ | {{dsc inc|cpp/utility/functional/dsc boyer_moore_searcher}} | ||
+ | {{dsc inc|cpp/utility/functional/dsc boyer_moore_horspool_searcher}} | ||
{{dsc end}} | {{dsc end}} | ||
+ | |||
+ | {{langlinks|de|es|ja|ru|zh}} |
Latest revision as of 21:35, 13 July 2024
Defined in header <functional>
|
||
template< class ForwardIt, class BinaryPredicate = std::equal_to<> > class default_searcher; |
(since C++17) | |
A class suitable for use with Searcher overload of std::search that delegates the search operation to the pre-C++17 standard library's std::search.
std::default_searcher
is CopyConstructible and CopyAssignable.
Contents |
[edit] Member functions
std::default_searcher::default_searcher
default_searcher( ForwardIt pat_first, ForwardIt pat_last, |
(since C++17) (constexpr since C++20) |
|
Constructs a std::default_searcher
by storing copies of pat_first, pat_last, and pred.
Parameters
pat_first, pat_last | - | a pair of iterators designating the string to be searched for |
pred | - | a callable object used to determine equality |
Exceptions
Any exceptions thrown by the copy constructors of BinaryPredicate
or ForwardIt
.
std::default_searcher::operator()
template< class ForwardIt2 > std::pair<ForwardIt2, ForwardIt2> |
(since C++17) (constexpr since C++20) |
|
The member function called by the Searcher overload of std::search to perform a search with this searcher.
Returns a pair of iterators i, j
, where i
is std::search(first, last, pat_first, pat_last, pred) and j
is std::next(i, std::distance(pat_first, pat_last)) unless std::search
returned last (no match), in which case j
equals last as well.
Parameters
first, last | - | a pair of iterators designating the string to be examined |
Return value
A pair of iterators to the first and one past last positions in [
first,
last)
where a subsequence that compares equal to [
pat_first,
pat_last)
as defined by pred is located, or a pair of copies of last otherwise.
[edit] Example
#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::default_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"; }
Output:
The string "pisci" found at offset 43
[edit] See also
searches for the first occurrence of a range of elements (function template) | |
(C++17) |
Boyer-Moore search algorithm implementation (class template) |
Boyer-Moore-Horspool search algorithm implementation (class template) |