gpt4 book ai didi

c++ - 三重映射,包括 2 个键

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:27:50 26 4
gpt4 key购买 nike

我有一个包含 3 个字段的结构,两个 int s (我们称它们为 AB)bool (C)

我想创建一种该结构的数组,并能够通过任何键(A 或 B)访问它,得到孔对象(带有 A、B 和 C)作为返回。我不需要做类似“获取 bool 为真的所有对象”之类的事情,如果这有什么不同的话。

显然,两个键都是唯一的,而 bool 不能,但为了清楚起见,我想我会提到它。

如果没有 A 或 B,那将是一个简单的 std::map<int, bool> .

我目前看到的唯一解决方案是制作一个包含 2 set 的包装器s 和一个 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

最佳答案

我相信您正在寻找的是 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;

(根据 Rapptz 建议使用命名空间“快捷方式”)

例如,这里有一个 MultiIDStructmulti_index 容器,它有两个唯一的顺序,一个在 idA 上(它是一个成员MultiIDStruct)和第二个 idB(也是成员)。

模板参数乍一看似乎很少,但一旦您理解了它们的工作原理,它们就没那么糟糕了。

关于c++ - 三重映射,包括 2 个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17386024/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com