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创建此类的实例,则整个对象将位于堆上

为什么矢量指针和地图一样重要?为什么不在需要时在地图上查找向量呢?这似乎是一个过于复杂的数据结构。你是在问如何在地图上查找东西吗?实际上,我有一个接收线程,它接收所有数据并将其放入地图,然后向观察者线程发送信号。同时,当观察器线程接收到信号时,它将检查向量指针,以便为自己获取数据。我只想链接这两个数据结构。我想为了能够同步访问您的数据,您必须使用键在地图中查找它。谢谢您的解释!