#include <iostream>
#include <map>
#include <vector>
class Foo{
public:
int number;
Foo(int number){
this->number = number;
}
};
int main(int argc, const char * argv[])
{
// structure
std::map<int, std::vector<Foo*>>* m_mapvals;
// and its init.
m_mapvals = new std::map<int, std::vector<Foo*>>();
// one record
int vecval = 1;
std::vector<Foo *>* vecvals = new std::vector<Foo*>(); // init
vecvals->push_back(new Foo(42)); // fill with values
// insert record into structure
m_mapvals->insert(std::pair<int, std::vector<Foo*>>(vecval, *vecvals));
// first at() selects the record, therefore result is vector
// the second at selects the first Foo object pointer from the vector
std::cout << "Number is: " << m_mapvals->at(1).at(0)->number;
return 0;
}
Это решает проблему, однако, я настоятельно рекомендую не использовать так много указателей. Вы, скорее всего, потеряете контроль над памятью. Вы используете суффикс m_, поэтому я предполагаю, что основная карта является атрибутом объекта. Как правило, нет никакого преимущества иметь указатель на карте или вектор между атрибутами. Если вы хотите создать динамически обновляемую коллекцию объекта, это может быть лучше и проще:
class Collection{
std::map<int, std::vector<Foo*>> m_myCollection
}
или если нет никаких проблем с клонированием хранимых объектов, наиболее безопасным является
class Collection{
std::map<int, std::vector<Foo>> m_myCollection
}
Но это зависит о сути проблемы. Тем не менее, здесь нет проблем с управлением памятью. Если вы создадите экземпляр этого класса с помощью нового, весь объект будет находиться в куче.
Почему векторные указатели, а также карта? Почему бы просто не взглянуть на вектор на карте, когда вам это нужно? – doctorlove
Это похоже на чрезмерно сложную структуру данных. – Borgleader
Вы спрашиваете, как искать вещи на карте? – doctorlove