【发布时间】:2016-08-10 02:46:13
【问题描述】:
我想知道是否可以在另一个数组{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 & std::operator&& 的参数 1, const _Tp&) [with _CharT = char; _Traits = std::char_traits; _Tp = std::array]’ 运算符&& __os, const _Tp& __x) ^ bm.cpp:18:19:错误:无法将“std::basic_ostream”左值绑定到“std::basic_ostream&&” std::cout & std::operator&& 的参数 1, const _Tp&) [with _CharT = char; _Traits = std::char_traits; _Tp = std::array]’ 运算符&& __os, const _Tp& __x) ^
【问题讨论】:
-
你看过那个函数的reference page吗?
-
@Bob__ 感谢您的评论。我看了一下函数,有一个字符串匹配的例子。我不确定这是否适用于数组匹配。可能是我错过了什么。
-
你应该包含正确的标题并且那些函数属于
std::experimental而不是std::。此外,您应该实现 operator 或使用循环打印出值;) -
@JonathanMee。我无法承受缓慢的搜索,因为我正在搜索的数组太大而且我确信
make_boyer_moore_searcher非常快。我不确定search使用什么逻辑。 -
@AwaitedOne 您是否对
std::search使用的默认方法进行了基准测试?仅在证明需要时才建议使用专业化。此外,您提出的替代方案仅是experimental,因此不能保证在所有实现中都存在,这已在下面为您证明。