我有一个指向矢量指针映射的指针:
std::map<int, std::vector<object *> > *m_mapvals;
和不同数量的向量指针:
int vecval = 1;
std::vector<object *> *m_vecvals;
对于每个向量指针,我使用一个唯一的整数,并且我希望每个向量指针指向映射中具有分配的键的一个条目。我怎么能做到这一点?
谢谢,
#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
}
但这取决于问题的要点。尽管如此,内存管理没有问题。如果您使用 new 创建此类的实例,则整个对象将在堆上。