【发布时间】:2013-02-19 12:55:13
【问题描述】:
问题看起来很简单,基本上我有一个序列,比如:
typedef mpl::vector<
mpl::vector<mpl::_1, mpl::_2>,
mpl::vector<mpl::_1, mpl::_2, mpl::_3>,
mpl::vector<mpl::_2, mpl::_1>,
mpl::vector<mpl::_2, mpl::_2>,
mpl::vector<mpl::_2, mpl::_2, mpl::_3>
> seq;
我想做的是将其转换为 trie,最终结果类似于:
mpl::map<
mpl::pair<mpl::_1,
mpl::map<
mpl::pair<mpl::_2,
mpl::map<
mpl::pair<TERMINAL, T>,
mpl::pair<mpl::_3,
mpl::map<
mpl::pair<TERMINAL, T>
>
>
>
>
>
>
mpl::pair<mpl::_2,
mpl::map<
mpl::pair<mpl::_1,
mpl::map<
mpl::pair<TERMINAL, T>
>
>,
mpl::pair<mpl::_2,
mpl::map<
mpl::pair<TERMINAL, T>,
mpl::pair<mpl::_3,
mpl::map<
mpl::pair<TERMINAL, T>
>
>
>
>
>
>
>
所以,问题是,这可能吗(我认为不可能)?如果可能,我错过了哪些黑暗咒语?
编辑:如果上述从序列序列到 trie 的转换不清楚,让我看看我是否可以用简单的英语陈述它(通常更难。)基本上主序列中的每个序列都由一些类型组成(_1、_2 等)转换后的版本是折叠常见前缀的特里树。可能是附图有帮助..
EDIT2:感谢@Yakk,希望现在问题更清楚了......
【问题讨论】:
-
我看不出你想要的转换是什么。请提供实际的具体示例和伪代码。
-
@Yakk,已更新 - 这有帮助吗?基本上我正在尝试在图片中构建给定的树,以便我可以使用给定的序列导航(
mpl::vector<mpl::_1, mpl::_2>以获取TERMINAL类型的实例) -
如果缺少子序列 1 和 4,则该结构是否等同于生成的结构?如果我理解正确的话,主序列是路径序列,并且在不存在时生成节点(缺少路径
mpl::vector<mpl::_1>和mpl::vector<mpl::_2>) -
@AndyProwl,最终结果应该允许您查找任何给定的序列以获得
TERMNIAL类型,如果缺少任何,我看不出这怎么可能? -
@Nim:我想知道的是从主序列中删除第一个和第四个序列是否会产生相同的结果。在我看来,这些序列是多余的,不是吗?如果没有,为什么
mpl::vector<mpl::_1>和mpl::vector<mpl::_2>也没有出现?
标签: c++ templates boost template-meta-programming boost-mpl