boost :: intrusive :: splay_set中的指针

时间:2012-03-27 13:17:17

标签: c++ pointers boost

我目前正在尝试学习如何使用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*> 

再次,这里没有运气。将第二个代码中的类别*更改为v​​oid_pointer(类别)也不起作用。遗憾的是,增加文档对于添加指向侵入式splay集的指针没有帮助。

有没有人能解决我的问题?提前谢谢。

1 个答案:

答案 0 :(得分:0)

两件事:

首先,您不应存储指向对象的指针,您应该存储实际对象。所以你的声明应该是这样的:

splay_set<Category, compare<std::greater<Category>>> CategoriesSplay

其次,您需要在类中实现容器需要执行其工作的数据成员。最简单的方法是从基类“hook”类继承,如下所示:

class Category : public splay_set_base_hook<> {
...

请记住:侵入式容器不像STL容器那样管理其包含对象的内存。您需要在之前分配对象,然后将其插入容器中,并确保在删除它时将其删除。