Ich würde gerne wissen, ob ich ein Array {67,55,65}
in einem anderen Array {23,45,67,55,65,66,76,78}
finden kann. Ich bin nicht daran interessiert, einzelne Elemente des Arrays zu finden, sondern das Array als Ganzes. Ich habe versucht, einige CodeFinden eines Arrays als Teilstring in ein anderes Array
#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";
}
Edit: den Grund zu gehen mit make_boyer_moore_searcher
ist die Größe meiner Array, etwa zu berechnen, kann etwa 10 Millionen Euro. Ich möchte eine effiziente Suchtechnik.
Ich bin mir nicht sicher, ob mein Code funktionieren soll. Ich habe viele Fehler
bm.cpp:12:20: error: ‘make_boyer_moore_searcher’ is not a member of ‘std’ std::make_boyer_moore_searcher( ^ bm.cpp:15:19: error: cannot bind ‘std::basic_ostream’ lvalue to ‘std::basic_ostream&&’ std::cout << "The string " << re << " found at offset " ^ In file included from /usr/include/c++/4.8/iostream:39:0, from bm.cpp:1: /usr/include/c++/4.8/ostream:602:5: error: initializing argument 1 of ‘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: error: cannot bind ‘std::basic_ostream’ lvalue to ‘std::basic_ostream&&’ std::cout << "The string " << re << " not found\n"; ^ In file included from /usr/include/c++/4.8/iostream:39:0, from bm.cpp:1: /usr/include/c++/4.8/ostream:602:5: error: initializing argument 1 of ‘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) ^
Haben Sie bei der [Bezugsseite] sehen (http://en.cppreference.com/ w/cpp/experimental/boyer_moore_searcher) dieser Funktion? –
@Bob__ Danke für deinen Kommentar. Ich habe mir die Funktion angeschaut und es gibt ein Beispiel für String Match. Ich bin mir nicht sicher, ob das für eine Array-Übereinstimmung funktioniert. Vielleicht fehlt mir etwas. – AwaitedOne
Sie sollten die richtigen Header einschließen, und diese Funktion gehört zu 'std :: experimental' nicht' std :: '. Außerdem sollten Sie Operator << für Array implementieren oder eine Schleife verwenden, um die Werte auszudrucken;) –