构建索引:副本还是指针?

时间:2010-07-28 17:51:57

标签: c++ data-structures indexing

我有一个存储......好的数据结构。现在,我需要以稍微不同的方式访问各种数据,因此我实际上构建了一个内存中的索引。但我想知道:索引应该保留指针还是副本?

详细说明,我说

class Widget
{
    // Ways to access the list of gears...
private:
    std::list<Gears> m_gears;
};

现在,我有两个Widget,这两者之间存在Gear之间的映射。目前,这是

boost::unordered_map<Gear, Gear>

Gear是一个相当沉重的课程,我觉得制作这么多副本是糟糕的设计。我可以存储一个指针,但是映射只对相应的Widget的生命周期有效,并且你开始得到-> ...(如果那个std::list发生了变化到std::vector,它变得更复杂......)

与副本有关,它实际上稍差:有两个boost::unordered_map个,每个方向一个。因此,对于每个Gear,我最多可以复制2份。

或者,我可以将索引放在Widget类中,但我觉得这违反了Widget类的职责。

2 个答案:

答案 0 :(得分:0)

您可以尝试使用Boost指针容器库:http://www.boost.org/doc/libs/1_43_0/libs/ptr_container/doc/ptr_container.html

我认为它完全解决了你所面临的问题。

答案 1 :(得分:0)

您可以将所有齿轮存储在一个位置,例如静态地存储在齿轮类中,然后让每个映射AND小部件仅存储参考/索引吗?

你必须跟踪每个装备的参考,以便你知道什么时候可以处理它们,但这应该很容易。