Я ищу идеальную структуру данных для следующего сценария:
У меня есть индекс i
, и для каждого из них мне нужно поддерживать следующую операцию 1 : быстро найти свои Foo
объекты (см. Ниже), каждый из которых связан с double
значение.
Итак, я сделал это:
struct Foo {
int a, b, c;
};
typedef std::map<Foo, double> VecElem;
std::vector<VecElem> vec;
Но это оказывается неэффективным, потому что я также должен обеспечить очень быструю поддержку для следующей операции 2 : удалить все Foo
s, которые имеют определенное значение для 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>
).