繁体   English   中英

在地图中插入一个键值,其中地图的值是一个向量对

[英]Inserting a key value in a map where value of map is a vector pair

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

std::map<Node*, std::vector<pair<Edge*, Node*> > > adjacencyMap;

,其中NodeEdge是结构体。 我想创建一个图,两个节点之间的每个连接都应该存储在这个图中。 每个节点可以有多个连接到另一个节点。 主要思想是,对于每个节点,可能有一个边和节点对的列表,例如

node1 and node2 are connected through an edge12
node1 and node3 are connected through an edge13

adjacencyMap应该像

node1 -> [(edge12, node2), (edge13, node3)]
node2 -> [(edge12, node1)]
node3 -> [(edge13, node1)]

我知道如何插入像(node1, pair(edge12,node2))这样的元素(node1, pair(edge12,node2))但我不知道如何插入,如果(node1, pair(edge12,node2))已经是一个元素, (node1, pair(edge13, node3))使得

node1 -> [(edge12, node2), (edge13, node3)].

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

提前致谢!

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

如果不存在, std::unordered_map operator[]已经构造了一个默认值,因此只需推送它们就足够了:

map[node1].emplace_back(edge13, node2);
map[node1].emplace_back(edge13, node3);

你可能会这样做:

adjacencyMap[node1] = {{edge12, node2}, {edge13, node3}};
adjacencyMap[node2] = {{edge12, node1}};
adjacencyMap[node3] = {{edge13, node1}};

甚至:

std::map<Node*, std::vector<std::pair<Edge*, Node*>>> adjacencyMap =
{
    {node1, {{edge12, node2}, {edge13, node3}}},
    {node2, {{edge12, node1}}},
    {node3, {{edge13, node1}}}
};

要添加节点,您可以执行以下操作:

// use alias to avoid several look-up
auto& v1 = adjacencyMap[node1]; // auto is std::vector<std::pair<Edge*, Node*>>>
// Then do job on the vector:
v1.emplace_back(edge12, node2);
v1.emplace_back(edge13, node3);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM