我正在为以下场景寻找完美的数据结构:
我有一个索引i
,对于每一个我需要支持以下操作 1:快速查找它的Foo
对象(见下文),每个对象都与一个double
值相关联。
所以我这样做了:
struct Foo {
int a, b, c;
};
typedef std::map<Foo, double> VecElem;
std::vector<VecElem> vec;
但事实证明它效率低下,因为我还必须为以下操作 2提供非常快速的支持:删除所有对andFoo
具有特定值的 s (以及相关联的 double 值)。a
b
要执行此操作 2,我必须遍历向量中的映射,检查Foo
s 的a
和b
值并从映射中一个一个地擦除它们,这似乎非常昂贵。
所以我现在正在考虑这个数据结构:
struct Foo0 {
int a, b;
};
typedef std::multimap<Foo0, std::map<int, double> > VecElem;
std::vector<VecElem> vec;
这应该为上述操作 1 和 2 提供快速支持。这合理吗?嵌套容器结构是否有很多开销?
注意:每个多图通常只有一个或两个键(类型Foo0
),每个键大约有 5-20 个值(类型std::map<int,double>
)。