我有一个包含3个字段的结构,两个ints (我们称之为A和B)和一个bool (C).
我想创建一个该结构的数组,并能够通过任何键(A或B)访问它,获得孔对象(使用A,B和C)作为回报.我不需要做一些像"获取bool为真的所有对象"这样的东西,如果这有什么不同的话.
显然,两个关键都是独一无二的,bool不可能,但我想我为了清楚起见而提到它.
如果没有A或B,那就简单了std::map<int, bool>.
我目前看到的唯一解决方案是制作一个包含2 set秒和1 秒的包装器vector.有什么方法可以让我的生活更轻松吗?
注意:它最多包含一百个元组,因此性能不应成为问题.线性访问是可以接受的
为了使它更清晰,我希望能够做到这一点:
foobar<int, int, bool> array; // or something along those lines
array.add(1, 101, true);
array.add(2, 102, false);
array.getA(1); // returns first object
array.getA(2); // returns second object
array.getB(102); // returns second object again
Run Code Online (Sandbox Code Playgroud)
我相信你要找的是boost :: multi_index.它允许您声明具有多个索引的容器.
struct MultiIDStruct
{
size_t idA;
size_t idB;
std::string name;
};
namespace mul = boost::multi_index;
boost::multi_index_container< MultiIDStruct,
mul::indexed_by<
mul::ordered_unique< mul::member< MultiIDStruct, size_t, &MultiIDStruct::idA > >,
mul::ordered_unique< mul::member< MultiIDStruct, size_t, &MultiIDStruct::idB > >
> > data;
Run Code Online (Sandbox Code Playgroud)
(根据Rapptz建议使用名称空间"快捷方式")
例如,这里有一个multi_index容器,MultiIDStruct其中有两个唯一的排序,一个on idA(是其成员MultiIDStruct)和第二个on idB(也是一个成员).
模板参数起初看起来很少,但一旦你理解了它们的工作方式就不会那么糟糕.