在映射中插入键值,其中映射的值是向量对
Inserting a key value in a map where value of map is a vector pair
我很难弄清楚如何在以下类型的地图中插入元素。鉴于:
std::map<Node*, std::vector<pair<Edge*, Node*> > > adjacencyMap;
,其中Node
和Edge
是结构体。我想创建一个图形,两个节点之间的每个连接都应该存储在这个地图中。每个节点可以有多个连接到另一个节点的连接。主要思想是,对于每个节点,可以有一个边和节点对的列表,例如
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(edge13, node3))
这样
node1 -> [(edge12, node2), (edge13, node3)].
我怎样才能实现我的意图?
提前感谢!
我假设Node
和Edge
的内存管理在其他地方,因为存储原始指针意味着没有人会照顾他们的管理。
operator[]
std::unordered_map
已经构造了一个默认值,如果它不存在,那么只需推送它们就足够了:
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);
相关文章:
- 如何在 c++ 中创建结构向量的映射
- 在C++中初始化向量映射的最有效方法
- C++ STD 函数运算符:有没有一种方法可以通过函数将一个向量映射到另一个向量上?
- 字符串共享内存映射的向量
- 具有 2 个分量的数组的特征映射到 3 的向量
- 当键值是 std 向量时,为什么使用 at in C++ 访问映射值如此缓慢?
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 如何初始化 std::向量的映射?
- 访问映射中的分区向量
- 如何将整数向量插入到键中,标准::映射的值
- 将一个向量映射到不同的对,即使向量映射到每对时是不同的?
- 如何从向量映射中迭代向量
- 访问映射向量的映射元素(c++)
- 映射向量的时间复杂性是多少
- C++:通过从映射向量分配映射实例来填充映射的映射
- 在一个映射向量上迭代,如果满足条件,则插入一个副本
- 如何在映射向量中循环访问地图
- 丢弃限定符 访问类中的映射向量时出错
- 从常量迭代器到映射向量,获取映射向量中映射元素的键和值
- 映射向量c++