【发布时间】:2016-04-13 09:00:29
【问题描述】:
我有一大串由以下组成的多组件键 定义了比较运算符的 poi 数据类型:
typedef boost::tuple<int, char, unsigned long> Key;
我想将这些键与固定的集合模式进行匹配, 它由相同的组件组成,但特别是 模式某些组件可以省略:
typedef boost::tuple<
boost::optional<int>
, boost::optional<char>
, boost::optional<unsigned long> > Pattern;
boost::optional 值未设置表示 星号,“匹配所有内容”:
Key(1, 2, 3) match Pattern(1, 2, *)
Key(1, 2, 3) match Pattern(*, 2, 3)
我想比 O(N) 更快地执行匹配,其中 N是模式的数量。
我从自定义比较运算符 1 开始,用于模式 将它们存储在排序向量中。 Operator1 只是排序 星号在其他所有内容之后。然后执行查询 使用 std::lower_bound 和自定义比较运算符2。 Operator2 在比较期间省略了未设置的关键组件。 但我想我无法摆脱单一排序的向量 因为如果第二个组件是 * 我省略了它 不保证对第三个组件的“切片”进行排序 我得到了一些对 std::lower_bound 有用的东西。
【问题讨论】:
-
您需要每个“形状”搜索一个索引。构建索引的成本很高,但您可以使用 unordered_map 来获得搜索的平均恒定时间。
标签: c++ algorithm data-structures stl