c++将 vector 指针分配给 vector 指针的映射

标签 c++ pointers vector dictionary

<分区>

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

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

和不同数量的 vector 指针:

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

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

谢谢,

最佳答案

#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_ 后缀,因此我猜 main map 是一个对象属性。通常,在属性之间的 map 或 vector 上有指针没有任何优势。如果你想创建动态变化的对象集合,这可能更好更简单:

class Collection{
   std::map<int, std::vector<Foo*>> m_myCollection
}

或者如果克隆存储对象没有问题,最安全的是

class Collection{
   std::map<int, std::vector<Foo>> m_myCollection
}

但这取决于问题的要点。尽管如此,内存管理没有问题。如果您使用 new 创建此类的实例,则整个对象将在堆上。

关于c++将 vector 指针分配给 vector 指针的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18786032/

相关文章:

c++ - 使用 const char 数组参数分析 constexpr 显示运行时执行

c++ - 散列定义到导致空点异常的数组的第一个元素

c++ - vector 消失

java - 矩形对象抛出错误,说它在java中找不到.contains()方法

c++ - 通过迭代器获取 vector 中的索引

c++ - 使用 "new"关键字时 sYSMALLOc 断言失败

c# - 将指向成员的 C++ 指针转换为 C#

评估模板的 C++ 模板参数(模板模板参数)

c - 声明一个带有指针的字符串文字比声明常量数组更节省内存吗?

c++ - 肯定是无效的指针范围