Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;:将hashmap内容复制到指针列表_C++_List_Pointers_Hashmap - Fatal编程技术网

C++ C++;:将hashmap内容复制到指针列表

C++ C++;:将hashmap内容复制到指针列表,c++,list,pointers,hashmap,C++,List,Pointers,Hashmap,我有一个hashmap,其中包含structFoo的项(而不是指针)。现在,我想在列表中有这些项目的指针。我该怎么做 我曾尝试迭代hashmap并将&*iter插入列表,但指针一旦超出范围就会失效 我应该能够在没有动态分配的情况下做到这一点,不是吗 我喜欢这样,但它不起作用: 对于(…) { Foo&bar=*iter; 列表。插入(&bar); }指向hashmap中项目的指针将在迭代器失效的同时失效 如果不使用hashmap(即,在迭代hashmap并获取其元素的地址后,不要插入/删除/复制

我有一个hashmap,其中包含structFoo的项(而不是指针)。现在,我想在列表中有这些项目的指针。我该怎么做

我曾尝试迭代hashmap并将&*iter插入列表,但指针一旦超出范围就会失效

我应该能够在没有动态分配的情况下做到这一点,不是吗

我喜欢这样,但它不起作用: 对于(…) { Foo&bar=*iter; 列表。插入(&bar);
}

指向hashmap中项目的指针将在迭代器失效的同时失效

如果不使用hashmap(即,在迭代hashmap并获取其元素的地址后,不要插入/删除/复制/任何内容),指针应保持有效

我有一个包含项目的hashmap 结构Foo(不是指针)的。现在,我 想要这些项目的指针吗 在列表中。我该怎么做

像这样:

typedef Whatever_Hash_Map<Foo> Container;
Container container;
...populate container...
std::list<Foo*> l;
for (Container::const_iterator i = container.begin(); i != container.end(); ++i)
    l.insert(&*i);
...use list...
typedef_散列_映射容器;
集装箱;
…填充容器。。。
std::列表l;
for(Container::const_迭代器i=Container.begin();i!=Container.end();++i)
l、 插入(&*i);
…使用列表。。。
我已尝试迭代hashmap 并在列表中插入&*iter 但是指针会随着时间的推移而失效 一旦它们超出范围

如果您让任何内容超出范围,则无法使用此列表。如果需要列表在创建它的函数返回之后保持不变,请确保在堆上分配列表本身并返回指向它的指针

我应该能做到这一点,而不必担心 动态分配,不是吗

列表动态分配节点。散列映射可能在内部动态地分配存储桶。但是,您不必显式地动态分配指向Foo的指针——所有标准容器和类似容器都会使用值语义(即Foo的复制构造函数或赋值运算符)将Foo复制到堆上

我喜欢这样,但它不起作用: 对于(…){Foo&bar=*iter; list.insert(&bar);}


这本身看起来不错,错误在代码的其他地方。这就是为什么您应该遵循James的建议,发布足够的代码,我们可以指出您的错误。

如果您发布一些代码来演示问题,这会有所帮助。你说的“指针一旦超出范围就会失效”是什么意思?你是说“一旦hashmap超出范围就会失效?”不是。hashmap是在整个程序运行期间有效的类的一个成员。我不去管它,但假设
hash_map
(来自STL)或
无序_map
(来自C++0x)如果正在使用,则当元素添加到容器或从容器中移除时,迭代器不会失效(除非移除元素时,该元素的任何迭代器都会失效,这一点很明显)。@James Agree,但Kitty没有说明实现是什么(尽管可以合理预期任何实现都具有相同的属性)。