Что-то вроде хранения данных
std::set<std::vector<int> > data;
Теперь вы можете создать один из них для каждой группы, если нет гарантии, что количество элементов в каждой группе одинаково, или если вы знаете, чтокаждая группа - это определенное количество элементов, затем поместите их в один набор.
Затем используйте std::find_if
с пользовательским предикатом с указанным выше data
.И в этом предикате есть std::vector
, то есть последовательность, которую вы ищете.
struct search_sequence
{
bool operator()(std::vector<int> const& cVal) const
{
if (sequence.size() <= cVal.size())
return std::equal(sequence.begin(), sequence.end(), cVal.begin());
return false;
}
std::vector<int> sequence;
};
Теперь, применяя это с std::find_if
, вы найдете все последовательности в data
, которые начинаются с последовательности поиска.
РЕДАКТИРОВАТЬ: чтобы сохранить в одном экземпляре, оберните вектор, например,
struct group_entry
{
int id;
std::vector<int> data;
friend bool operator<(group_entry const& lhs, group_entry const& rhs)
{
return lhs.id < rhs.id && lhs.data < rhs.data;
}
};
Теперь ваш набор содержит
std::set<group_entry> data;
Добавить все данные из всех групп
Изменить предикат:
struct search_sequence
{
bool operator()(group_entry const& cVal) const
{
if (sequence.size() <= cVal.data.size())
return std::equal(sequence.begin(), sequence.end(), cVal.data.begin());
return false;
}
std::vector<int> sequence;
};