c 容器与java,为什么C ++ STL不提供任何“树”容器?

为什么C ++ STL不提供任何“树”容器,而最好使用什么呢?

我想将对象的层次结构存储为树,而不是将树用作性能增强...

#1楼

海事组织,一个遗漏。 但是我认为有充分的理由不在STL中包含Tree结构。 维护树有很多逻辑,最好将其作为成员函数写入基本TreeNode对象中 。 当TreeNode包装在STL标头中时,它变得更加混乱。

例如:

template

struct TreeNode

{

T* DATA ; // data of type T to be stored at this TreeNode

vector< TreeNode* > children ;

// insertion logic for if an insert is asked of me.

// may append to children, or may pass off to one of the child nodes

void insert( T* newData ) ;

} ;

template

struct Tree

{

TreeNode* root;

// TREE LEVEL functions

void clear() { delete root ; root=0; }

void insert( T* data ) { if(root)root->insert(data); }

} ;

#2楼

“我想将对象的层次结构存储为树”

C ++ 11来了又去了,他们仍然没有提供std::tree ,尽管这个主意确实出现了(请参阅此处 )。 也许他们之所以没有添加它,是因为在现有容器之上构建自己的容器非常容易。 例如...

template< typename T >

struct tree_node

{

T t;

std::vector children;

};

一个简单的遍历将使用递归。

template< typename T >

void tree_node::walk_depth_first() const

{

cout<

for ( auto & n: children ) n.walk_depth_first();

}

如果要维护层次结构, 并且希望它与STL算法一起使用 ,那么事情可能会变得复杂。 您可以构建自己的迭代器并实现某种兼容性,但是许多算法对层次结构根本没有任何意义(例如,任何更改范围顺序的事物)。 即使在层次结构中定义范围也可能是一件麻烦的事。

#3楼

所有STL容器均可与迭代器一起使用。 您不能在树上设置迭代器,因为没有“一种正确的”方法可以遍历树。

#4楼

从某种意义上说,std :: map是一棵树(要求它具有与平衡二叉树相同的性能特征),但是它没有公开其他树功能。 不包括真实的树数据结构的可能原因可能只是不包含stl中所有内容的问题。 stl可以看作是用于实现自己的算法和数据结构的框架。

通常,如果您需要基本的库功能,而stl中没有该功能,则解决方法是查看BOOST 。

否则,有一个一堆的库 了 那里 ,这取决于你的树的需求。

#5楼

std :: map基于一棵红黑树 。 您还可以使用其他容器来帮助您实现自己的树类型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值