我想知道是否可以在另一个数组{23,45,67,55,65,66,76,78}
中找到一个数组{67,55,65}
。我不想找到数组中的单个元素,而是整个数组。我尝试了一些代码。
#include <iostream>
#include <algorithm>
#include <array>
int main()
{
std::array<int,8> in = {23,45,67,55,65,66,76,78};
std::array<int,3> sstr = {67,55,65};
auto it = std::search(in.begin(), in.end(),
std::make_boyer_moore_searcher(
sstr.begin(), sstr.end()));
if(it != in.end())
std::cout << "The string " << sstr << " found at offset "
<< it - in.begin() << '\n';
else
std::cout << "The string " << sstr << " not found\n";
}
编辑: 使用make_boyer_moore_searcher
的原因是我的数组大小,大约有1000万个元素。我希望有一个高效的查找技术。
我不确定我的代码是否能够正常工作。我收到了许多错误信息。
bm.cpp:12:20: 错误:‘make_boyer_moore_searcher’不是‘std’的成员 std::make_boyer_moore_searcher( ^ bm.cpp:15:19: 错误:无法将‘std::basic_ostream’绑定到‘std::basic_ostream&&’ std::cout << "The string " << re << " found at offset " ^ 在文件中从/usr/include/c++/4.8/iostream:39:0包括, from bm.cpp:1: /usr/include/c++/4.8/ostream:602:5: 错误:初始化参数1时,‘std::basic_ostream<_CharT, _Traits>&& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits; _Tp = std::array]’ operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x) ^ bm.cpp:18:19: 错误:无法将‘std::basic_ostream’绑定到‘std::basic_ostream&&’ std::cout << "The string " << re << " not found\n"; ^ 在文件中从/usr/include/c++/4.8/iostream:39:0包括, from bm.cpp:1: /usr/include/c++/4.8/ostream:602:5: 错误:初始化参数1时,‘std::basic_ostream<_CharT, _Traits>&& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits; _Tp = std::array]’ operator<<(basic_ostream<_CharT, _Traits>&& __os, const _Tp& __x) ^
std::experimental
而不是std::
。此外,你应该为array<int>
实现operator<<
或使用循环打印出值 ;) - Bob__make_boyer_moore_searcher
非常快速。对于search
使用的逻辑,我还不确定。 - AwaitedOnestd::search
默认方法进行基准测试吗?只有在证明需要的情况下才建议使用特殊化。此外,你提出的替代方案仅为“实验性”的,因此不能保证存在于所有实现中,这已经在你的方案中得到了证明。 - underscore_d