如何遍历成对值的地图?
How to iterate through maps with value as pair?
我必须实现MST。我想成对添加值。我的问题是如何遍历值成对的地图以及如何访问地图。
void addedge(multimap<int, pair<int, int> > dirgraph, int source, int dest, int weight) // graph, source, dest, weight
{
dirgraph.insert(make_pair(weight, make_pair(source, dest)));
}
multimap<int, pair<int,int> > dirgraph;
addedge(dirgraph, 0, 1, 5);
addedge(dirgraph, 0, 4, 3);
addedge(dirgraph, 1, 2, 1);
addedge(dirgraph, 1, 4, 4);
addedge(dirgraph, 4, 3, 3);
addedge(dirgraph, 2, 3, 2);
multimap<int, pair<int, int> >::iterator it = dirgraph.begin();
multimap<int, pair<int, int> >::iterator itend = dirgraph.end();
for (; it != itend; it++)
cout << (*it).first << " from " << (*it).second.first << " to " << (*it).second.second << endl; // This dosen't work.
由于您的问题没有被标记,因此我假设C++11。下面是代码的注释和改进版本。
using edge = std::pair<int,int>; // for clarity
using directional_graph = std::multimap<int,edge>; // not std::map<edge,weight> ?
void add_edge(directional_graph &dirgraph, // pass by reference
int source, int dest, int weight)
{
dirgraph.insert(std::make_pair(weight, std::make_pair(source, dest)));
}
directional_graph dirgraph;
add_edge(dirgraph, 0, 1, 5);
add_edge(dirgraph, 0, 4, 3);
add_edge(dirgraph, 1, 2, 1);
add_edge(dirgraph, 1, 4, 4);
add_edge(dirgraph, 4, 3, 3);
add_edge(dirgraph, 2, 3, 2);
for(const auto&x : dirgraph)
std::cout << x.first << " from " << x.second.first << " to "
<< x.second.second << std::endl;
请注意,此代码更清晰、更干净。我用std::
来避免坏using namespace std;
。最重要的是,这段代码是正确的,因为add_edge()
实际上改变了第一个参数。在代码中,你创建了图形的本地副本,该副本经过修改,对实际图形没有任何影响。
附带说明:我发现使用图表的权重作为键很奇怪:您真的想通过权重来识别边缘吗?我本以为edge
类型更适合作为钥匙。在这种情况下,如果边是唯一的,那么您不需要multimap
,而只需要一个普通的map
。
相关文章:
- 有什么方法可以遍历结构吗
- 在循环中按顺序遍历成员变量
- 遍历模板参数
- 在遍历处理程序的向量时注册和注销处理程序
- C++RapidXml-使用first_node()遍历以修改XML文件中节点的值
- 遍历并行数组以确定C++中的最大数字
- 遍历顺序由 std::文件系统directory_iterator给出
- 遍历链表时的无限循环
- 从特定键开始遍历地图
- 如何遍历多个地图并获取它们的值? - C++
- 如何在C++中遍历谷歌原型地图?
- 如何遍历地图向量
- 遍历地图并将该对用作参考参数 C++11
- 使用相同的 for 循环按升序或降序遍历地图
- 如何遍历成对值的地图?
- 循环遍历地图时编译错误
- C++ - 遍历地图的地图
- 如何以一对为键遍历地图
- "No match for operator="尝试在C++中遍历地图
- 帮助提高地图遍历 C++ 的效率