我有一个指针指向矢量指针的地图:
std::map<int, std::vector<object *> > *m_mapvals;
和不同数量的向量指针:
int vecval = 1;
std::vector<object *> *m_vecvals;
对于每个向量指针,我使用一个唯一的整数,我希望每个向量指针指向映射中的一个条目,并使用指定的键。我怎么能做到这一点?
谢谢,
答案 0 :(得分:2)
#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创建此类的实例,则整个对象将在堆上。