我正在设计一个图表类,我想基于邻接列表。该类内部有一个DataStructure:
std::unordered_map<Node,std::list<??>,NodeHash,NodeEqual> map;
而不是??
,我希望指向存储在列表中的Node元素的指针或指向它的一些迭代器。
我是C ++的新手。我应该怎么做呢?
答案 0 :(得分:2)
如何从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
。
答案 1 :(得分:1)
这适用于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>
的包装,我会尝试相同的技巧