0

我有一个指向矢量指针映射的指针:

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

和不同数量的向量指针:

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

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

谢谢,

4

1 回答 1

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

于 2013-09-13T12:48:14.357 回答