gpt4 book ai didi

c++ - boost::multi_index 来自同一对象的多个键

转载 作者:太空宇宙 更新时间:2023-11-04 11:28:20 25 4
gpt4 key购买 nike

假设我有一个对象,可以通过来自不同 namespace 的不同名称来标识:

enum Namespace {
nspaceA,
nspaceB
};

struct Object {
int id;
std::map<Namespace, std::string> names;
};

现在我想将 Object 的实例存储在 boost::multi_index 中,并能够通过唯一 ID 以及命名空间/符号对找到一个对象:

array.find( boost::make_tuple( nspaceA, "foobar" ) );

所以 candidate 将是一个复合键,据我所知,一个对象只能代表一个键。但是一个 Object 实例在不同的命名空间中有名称。有没有办法用 boost::multi_index 数组解决这个问题?

最佳答案

您可以在容器中存储多个对象,其中每个对象引用您要存储的原始对象。

例如,如果你有一个 Foo 类型的对象,它可以被几个不同的键引用,其中每个键是一个命名空间 + 名称对,那么你可以例如存储类型的对象

struct Key {
Namespace namespace;
std::string name;
std::shared_ptr<Foo> object;
};

而不是直接存储 Foo 对象。

更新(问题更新后):如果您需要以其他方式(例如通过 ID)查找对象,则需要使索引不唯一或将对象存储在辅助容器中。

另一种选择是将命名空间分离到容器上的不同索引中,当然这也不是在所有情况下都适用。

关于c++ - boost::multi_index 来自同一对象的多个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25797005/

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