我正在制作一棵树(本质上是一棵前缀树,但对于数字不是字符串),它是由数字元组的排序列表构建的( (1,1,2), (1,2,5), (2,1, 0) 等...),每个都与单个标量值相关联(最有可能是 int 或 double)。由于它只构建一次,然后迭代/搜索了几次,我计划使用 std::vectors 来保存每个节点的子节点。要搜索树,我只需要调用 std::lower_bound 对每个节点的 _children 向量进行二进制搜索,该向量将包含每个节点的 std::pairs 及其各自的键。但是,底部节点必须包含一个向量,该向量由每个元组中的最后一个条目及其各自的值组成,因此必须与 BranchNode 的类型不同。代码如下所示:
class GenNode
{
};
template<typename key_type,typename value_type>
class BranchNode : GenNode
{
void insert(std::pair< std::vector<key_type> , value_type>);
private:
std::vector< std::pair<key_type,GenNode*> > _children;
};
template<typename key_type,typename value_type>
class LeafNode : GenNode
{
private:
std::vector< std::pair<key_type,value_type> > _children;
};
然而,这真的很难看,因为这两个类都必须继承自无用的 GenNode 类,这样每个 BranchNode 的子节点都可以是其他 BranchNode 或 LeafNode……有没有更好的方法来做到这一点?