如何在C++中存储对 stl 容器元素的指针/迭代器引用



>我正在设计一个图类,我想基于邻接列表。该类内部有一个数据结构:

std::unordered_map<Node,std::list<??>,NodeHash,NodeEqual> map;

而不是??,我想要指向存储在列表中的 Node 元素的指针或指向它的某个迭代器。

我是C++新手。我应该怎么做?

如何从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的迭代器,但它非常接近。

(如果我尝试同样的技巧来使M成为std::list<mymap::iterator>的包装器,ideone抱怨)

最新更新