假设我有一个std::vector< boost::variant< T1, T2, T3> >,例如请注意,在我的向量中,必须在'a' 之后有两个'b'或一个'q'。
请注意,这些 'a'、'b' 和 'q' 是不同的,你不知道它们混合的方式。
std::vector< boost::variant< T1, T2, T3> > vec;
vec = {a, b, b, a, q, a, q, a, b, b, a, q}
感谢 boost 访问者,现在我已经分别过滤了每个元素类型 (T):
veca= {a, a, a, a, a}
vecb= {b, b, b, b}
vecq= {q, q, q}
现在我想遍历'vecq'并为每个成员找到'vec'向量中的索引,然后通过找到这个索引,我能够在'vec'中找到这个'q'后面的'a'的索引最后在'veca'中找到'a'的索引。
我知道这是一个尖锐的问题,我正在寻找一种简单的方法(比遍历向量更快)。
PS我使用的是c++98标准
编辑:
我使用的访客
template<typename T>
struct T_visitor : public boost::static_visitor<>
{
T_visitor(std::vector<T>& v) : vec(v) {}
template<typename U>
void operator () (const U&) {}
void operator () (const T& value)
{
vec.push_back(value);
}
private:
std::vector<T>& vec;
};
第二次编辑:
换句话说:假设我有一个 std::vector< boost::variant< T1, T2, T3> >,例如
std::vector< boost::variant< T1, T2, T3> > vec;
vec = {a1, b15, b1, a5, q0, a5, q1, a9, b7, b6, a4, q2}
请注意,这些 'a'、'b' 和 'q' 是不同的,你不知道它们混合的方式。您唯一知道的是,在我的向量中,必须在'a'之后有两个'b' *或* 一个'q '。当我调用我的函数时,我知道我收到了一个构造类似于 vec 的向量。然后我有两个函数作为输入“T1,T3”和“T1,T2”。
例如得到 (a1, b15,b1)或(a5, q0)或(a5, q1)或(a9, b7,b6)或..
但我不知道如何给他们这些输入。