c ++将矢量指针分配给矢量指针的映射

时间:2013-09-13 12:12:37

标签: c++ pointers vector map

我有一个指针指向矢量指针的地图:

std::map<int, std::vector<object *> > *m_mapvals;

和不同数量的向量指针:

int vecval = 1; 
std::vector<object *> *m_vecvals;

对于每个向量指针,我使用一个唯一的整数,我希望每个向量指针指向映射中的一个条目,并使用指定的键。我怎么能做到这一点?

谢谢,

1 个答案:

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