Мой ответ предполагает, что когда вы говорите «подмножество», вы действительно ищете больше эквивалента «подстроки»;то есть поддержание порядка элементов во время поиска.
В конечном счете, я не вижу, как вы могли бы сделать это в чем-то меньшем, чем O(n*m)
.Учитывая это, вы можете просто сделать свой собственный довольно просто:
template <typename T1, typename T2>
bool contains(std::vector<T1> const& a, std::vector<T2> const& b) {
for (typename std::vector<T1>::const_iterator i = a.begin(), y = a.end(); i != y; ++i) {
bool match = true;
typename std::vector<T1>::const_iterator ii = i;
for (typename std::vector<T2>::const_iterator j = b.begin(), z = b.end(); j != z; ++j) {
if (ii == a.end() || *j != *ii) {
match = false;
break;
}
ii++;
}
if (match)
return true;
}
return false;
}
Демонстрация в реальном времени.
(Возможно, вы могли бы быть более креативными с параметрами шаблона.)