<分区>
我有一个指向 vector 指针映射的指针:
std::map<int, std::vector<object *> > *m_mapvals;
和不同数量的 vector 指针:
int vecval = 1;
std::vector<object *> *m_vecvals;
对于每个 vector 指针,我使用一个唯一的整数,并且我希望每个 vector 指针指向映射中具有分配的键的一个条目。我怎样才能做到这一点?
谢谢,
<分区>
我有一个指向 vector 指针映射的指针:
std::map<int, std::vector<object *> > *m_mapvals;
和不同数量的 vector 指针:
int vecval = 1;
std::vector<object *> *m_vecvals;
对于每个 vector 指针,我使用一个唯一的整数,并且我希望每个 vector 指针指向映射中具有分配的键的一个条目。我怎样才能做到这一点?
谢谢,
最佳答案
#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_ 后缀,因此我猜 main map 是一个对象属性。通常,在属性之间的 map 或 vector 上有指针没有任何优势。如果你想创建动态变化的对象集合,这可能更好更简单:
class Collection{
std::map<int, std::vector<Foo*>> m_myCollection
}
或者如果克隆存储对象没有问题,最安全的是
class Collection{
std::map<int, std::vector<Foo>> m_myCollection
}
但这取决于问题的要点。尽管如此,内存管理没有问题。如果您使用 new 创建此类的实例,则整个对象将在堆上。
关于c++将 vector 指针分配给 vector 指针的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18786032/