c++ - 建立索引 : Copies or pointers?

标签 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 的生命周期内有效,并且您开始获取 ->s...(如果那std::list 曾经更改为 std::vector,它变得更复杂...)

关于拷贝,实际上情况稍差:有两个 boost::unordered_map,每个方向一个。因此,对于每个 Gear,我最多制作 2 个拷贝。

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

最佳答案

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

我认为它正好解决了您面临的问题。

关于c++ - 建立索引 : Copies or pointers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3355826/

相关文章:

mysql - 我应该对已经属于多字段索引一部分的字段建立索引吗?

c++ - 寻找一种更快的方法来帮助减少/创建一个巨大的字符串列表

c++ - 避免 dynamic_cast 的模式

c++ - 将 vector 放置到 map 中

javascript - 如何在 JavaScript 中实现具有关联值的类似 Swift 的枚举?

c - 如何循环结构体?

c++ - 如何让 Ctrl+Q 退出没有菜单栏的 QT5 应用程序

c++ - C++ 中的函数式数据结构

Mysql 解释显示查询正在使用索引,而根据 Mysql 文档,它不应该使用索引

sql - 如何检查 SQL Server CE 数据库的索引?