我目前正在尝试学习如何使用boost库,我偶然发现了boost :: intrusive :: splay_set(或者splaytree)的问题。
假设我想要使用splay树来保持指向Category类的指针(所以Category *)。我正在尝试写下面的
splay_set<Category*, compare<std::greater<Category*>>> CategoriesSplay
可悲的是,它不起作用。我不会写它生成的错误,因为它超过了100并且Visual Studio正在终止编译过程。
然后我尝试更改我的Category类应该扩展到的类
class Category : public splay_set_base_hook<link_mode<auto_unlink>, Category*>
再次,这里没有运气。将第二个代码中的类别*更改为void_pointer(类别)也不起作用。遗憾的是,增加文档对于添加指向侵入式splay集的指针没有帮助。
有没有人能解决我的问题?提前谢谢。
答案 0 :(得分:0)
两件事:
首先,您不应存储指向对象的指针,您应该存储实际对象。所以你的声明应该是这样的:
splay_set<Category, compare<std::greater<Category>>> CategoriesSplay
其次,您需要在类中实现容器需要执行其工作的数据成员。最简单的方法是从基类“hook”类继承,如下所示:
class Category : public splay_set_base_hook<> {
...
请记住:侵入式容器不像STL容器那样管理其包含对象的内存。您需要在之前分配对象,然后将其插入容器中,并确保在删除它时将其删除。