【发布时间】:2015-01-25 18:00:56
【问题描述】:
在使用 boost 侵入式容器 splay_set 时,我必须重置本地迭代器成员变量。请参阅下面的示例代码 -
#include <boost/intrusive/splay_set.hpp>
using namespace boost::intrusive;
class Obj
{
public:
Obj(){};
~Obj(){};
boost::intrusive::list_member_hook<boost::intrusive::link_mode<boost::intrusive::normal_link> > m_memberHook;
private:
int a;
};
typedef splay_set<Obj, compare<greater<Obj> >, member_hook<Obj,
splay_set_member_hook<boost::intrusive::link_mode<boost::intrusive::normal_link> >,
&Obj::m_memberHook> > StorageSSet;
typedef StorageSSet::iterator StorageSSetIter;
class Storage
{
public:
bool init(StorageSSet& sset)
{
// Error: "no match for operator= in ..."
m_curIter = sset.begin(); ////<<<<------------- How to set new iterator
m_endIter = sset.end(); ////<<<<------------- How to set new iterator
}
protected:
StorageSSetIter m_curIter;
StorageSSetIter m_endIter;
};
我想侵入式容器不支持分配。我也无法通过成员初始化器列表初始化 splay_set 迭代器。 boost 和其他网站上的例子非常有限。没有人对这个问题给出明确的答案。
我的问题是我应该怎么做才能为 splay_set 迭代器(一般意义上的侵入式容器)分配一个新值。
【问题讨论】:
-
第一步是发布您的实际代码。您发布的不是有效的 C++:“Class”不是 C++ 关键字,未定义 list_member_hook,typedef 中有两个连续的逗号等。将值分配给无效类型是行不通的。
-
@Manish Re:编辑,如果没有
operator<,(std::?)greater<Obj>将如何工作? -
@sehe 我知道,我只是懒得写很多示例代码:/
-
糟糕。那是 not just sample code。所以,它也不是 just being lazy :)
标签: c++ boost iterator intrusive-containers