【问题标题】:c++ assigning vector pointers to map of vector pointers [closed]c ++将向量指针分配给向量指针的映射[关闭]
【发布时间】:2013-09-13 12:12:37
【问题描述】:

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

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

以及不同数量的向量指针:

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

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

谢谢,

【问题讨论】:

  • 为什么矢量指针和地图一样?为什么不在需要时在地图中查找矢量?
  • 这似乎是一个过于复杂的数据结构。
  • 您是在问如何在地图中查找内容吗?
  • 实际上,我有一个接收线程,它接收所有数据并将其放入地图并向观察者线程发送信号。同时当观察者线程接收到信号时,它会检查向量指针,以便为自己获取数据。我只是想把这两个数据结构联系起来。
  • 我猜为了能够同步访问您的数据,您必须使用密钥在地图中查找它。

标签: c++ pointers vector map


【解决方案1】:
#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 创建此类的实例,则整个对象将在堆上。

【讨论】:

  • 感谢您的解释!
猜你喜欢
  • 1970-01-01
  • 2012-08-04
  • 2011-08-04
  • 2020-04-13
  • 1970-01-01
  • 2018-05-16
  • 2013-01-21
  • 2019-09-10
  • 2014-08-23
相关资源
最近更新 更多