包含充当标识符的类的类的容器结构

时间:2014-03-27 17:38:35

标签: c++ design-patterns c++11

对于以下一组课程

class Identifier; // can be used as a key
class Data;
class MoreData;

class Object {
  Identifier id_;
  Data data_;
  MoreData moreData_;
};

Object类数据库的数据存储的优秀设计是什么?尝试了

std::set<Object>

这保持了Object类抽象的封装,但使用Identifier成员进行操作(例如,查找,插入等)的行为是笨重的。尝试了

std::map<Identifier, std::pair<Data, MoreData>>

使用Identifier作为键的语义更加自然,但是这会破坏Object类的封装和操作,需要从部件构造Object实例。

这里有更好的选择,不会遇到上述方法的任何缺点(或减轻它们)吗?没有什么是一成不变的,所以对象的重构或添加方法等都是受到赞赏的回应。如果标准中没有更好的东西,那么也会很好。

1 个答案:

答案 0 :(得分:1)

您可能需要查看Boost.Multi-Index,这样您就可以指定Object::id_作为密钥。类似的东西:

boost::multi_index_container<
    Object,
    boost::multi_index::indexed_by<
        boost::multi_index::ordered_unique<
            boost::multi_index::member<Object, Identifier, &Object::id_>
        >   
    >   
>;