C++ c++;将向量指针指定给向量指针的映射
我有一个指向向量指针映射的指针:C++ c++;将向量指针指定给向量指针的映射,c++,pointers,vector,map,C++,Pointers,Vector,Map,我有一个指向向量指针映射的指针: std::map<int, std::vector<object *> > *m_mapvals; std::map*m_mapvals; 以及不同数量的向量指针: int vecval = 1; std::vector<object *> *m_vecvals; int-vecval=1; 标准::向量*m_向量; 对于每个向量指针,我使用一个唯一的整数,我希望每个向量指针指向地图中的一个条目,并带有指定的键。我怎
std::map<int, std::vector<object *> > *m_mapvals;
std::map*m_mapvals;
以及不同数量的向量指针:
int vecval = 1;
std::vector<object *> *m_vecvals;
int-vecval=1;
标准::向量*m_向量;
对于每个向量指针,我使用一个唯一的整数,我希望每个向量指针指向地图中的一个条目,并带有指定的键。我怎样才能做到这一点
谢谢,包括
#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;
}
#包括
#包括
福班{
公众:
整数;
Foo(整数){
这个->数字=数字;
}
};
int main(int argc,const char*argv[]
{
//结构
标准::地图*m_地图;
//和它的init。
m_mapvals=新标准::映射();
//一张唱片
int-vecval=1;
std::vector*vecvals=new std::vector();//init
vecvals->push_back(new Foo(42));//用值填充
//将记录插入到结构中
m_mapvals->insert(std::pair(vecval,*vecvals));
//首先at()选择记录,因此结果为vector
//第二个at从向量中选择第一个Foo对象指针
std::cout数;
返回0;
}
这解决了您的问题,但是,我强烈建议不要使用这么多指针。你很可能会失去对记忆的控制。您使用m_u后缀,因此我猜主贴图是一个对象属性。通常,在属性之间的映射或向量上有指针没有好处。如果要创建动态变化的对象集合,这可能会更好、更简单:
class Collection{
std::map<int, std::vector<Foo*>> m_myCollection
}
类集合{
标准::地图m_myCollection
}
或者,如果克隆存储对象没有问题,则最安全的方法是
class Collection{
std::map<int, std::vector<Foo>> m_myCollection
}
类集合{
标准::地图m_myCollection
}
但这取决于问题的要点。尽管如此,内存管理还是没有问题。若使用new创建此类的实例,则整个对象将位于堆上 为什么矢量指针和地图一样重要?为什么不在需要时在地图上查找向量呢?这似乎是一个过于复杂的数据结构。你是在问如何在地图上查找东西吗?实际上,我有一个接收线程,它接收所有数据并将其放入地图,然后向观察者线程发送信号。同时,当观察器线程接收到信号时,它将检查向量指针,以便为自己获取数据。我只想链接这两个数据结构。我想为了能够同步访问您的数据,您必须使用键在地图中查找它。谢谢您的解释!