在地图中插入键值,其中map的值是矢量对

aGe*_*Ger 1 c++

我很难弄清楚如何在以下类型的地图中插入元素.鉴于:

std::map<Node*, std::vector<pair<Edge*, Node*> > > adjacencyMap;
Run Code Online (Sandbox Code Playgroud)

,结构NodeEdge结构.我想创建一个图表,两个节点之间的每个连接都应存储在此映射中.每个节点可以与另一个节点建立多个连接.主要思想是,对于每个节点,可以存在边对和节点对的列表,例如

node1 and node2 are connected through an edge12
node1 and node3 are connected through an edge13
Run Code Online (Sandbox Code Playgroud)

adjacencyMap

node1 -> [(edge12, node2), (edge13, node3)]
node2 -> [(edge12, node1)]
node3 -> [(edge13, node1)]
Run Code Online (Sandbox Code Playgroud)

我知道如何插入一个元素,(node1, pair(edge12,node2))但我不知道如何插入,如果(node1, pair(edge12,node2))已经是一个元素,(node1, pair(edge13, node3))那么

node1 -> [(edge12, node2), (edge13, node3)].
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现自己的意图?

提前致谢!

Jac*_*ack 6

我假设内存管理NodeEdge其他地方一样,因为存储原始指针意味着没有人会照顾他们的管理.

operator[]std::unordered_map已建,如果它不存在,因此acually这是不够的,只是把他们的默认值:

map[node1].emplace_back(edge13, node2);
map[node1].emplace_back(edge13, node3);
Run Code Online (Sandbox Code Playgroud)

  • 这绝对是一个很好的微优化,但它取决于OP代码是否需要一次性存储它们. (3认同)