如何在 C++ 中存储对 stl 容器元素的指针/迭代器引用?
How to store pointer / iterator reference to stl container element in C++?
我正在设计一个图 class,我希望它基于邻接表。 class 内部有一个数据结构:
std::unordered_map<Node,std::list<??>,NodeHash,NodeEqual> map;
而不是 ??
,我想要指向存储在列表中的节点元素的指针或指向它的一些迭代器。
我是 C++ 新手。我该怎么办?
How do I get pointer to an existing key node from the unordered_map?
找到具有该键的元素,获取元素的 first
成员的地址。
std::unordered_map<Node,std::list<Node*>,NodeHash,NodeEqual> map;
Node node1;
(void) map[node1]; // add { node1, {} } to the map
...
auto iter = map.find(node1);
if (iter != map.end())
{
Node* n = &iter->first;
Node node2;
map[node2].push_back(n);
}
这里 n
是指向现有密钥的指针,等于 node1
。
这适用于 ideone
;不知道能不能便携
struct M;
typedef std::unordered_map<Node, std::list<M>, NodeHash, NodeEqual> mymap;
struct M { mymap::iterator x; };
不幸的是,M
不完全是 mymap
的迭代器,但它非常接近。
(ideone
抱怨如果我尝试使用相同的技巧使 M
成为 std::list<mymap::iterator>
的包装)
我正在设计一个图 class,我希望它基于邻接表。 class 内部有一个数据结构:
std::unordered_map<Node,std::list<??>,NodeHash,NodeEqual> map;
而不是 ??
,我想要指向存储在列表中的节点元素的指针或指向它的一些迭代器。
我是 C++ 新手。我该怎么办?
How do I get pointer to an existing key node from the unordered_map?
找到具有该键的元素,获取元素的 first
成员的地址。
std::unordered_map<Node,std::list<Node*>,NodeHash,NodeEqual> map;
Node node1;
(void) map[node1]; // add { node1, {} } to the map
...
auto iter = map.find(node1);
if (iter != map.end())
{
Node* n = &iter->first;
Node node2;
map[node2].push_back(n);
}
这里 n
是指向现有密钥的指针,等于 node1
。
这适用于 ideone
;不知道能不能便携
struct M;
typedef std::unordered_map<Node, std::list<M>, NodeHash, NodeEqual> mymap;
struct M { mymap::iterator x; };
不幸的是,M
不完全是 mymap
的迭代器,但它非常接近。
(ideone
抱怨如果我尝试使用相同的技巧使 M
成为 std::list<mymap::iterator>
的包装)