我正在尝试使用地图矢量创建图表。我实际上正在查看一本书中的代码并尝试将其输入到2012年的视觉工作室中,这样我就可以搞砸图表了。但由于某种原因,它不允许我添加一对矢量。代码
创建矢量
//vector that holds a map of all adjacent vertices
vector<map<int, int> > adjList;
图表类的构造函数
Graph::Graph(int n){
map<int, int> element;
adjList.assign(n, element);
}
将项目添加到矢量
int v1 = e.v1;
int v2 = e.v2;
int weight = e.weight;
//add the first vertix the edge connects to intto the adjList
adjList.insert(make_pair(v1, weight));
//add the second vertix the edge connects to into the adjList
adjList.insert(make_pair(v2, weight));
错误我在试图编辑
时从视觉工作室获得的错误Error 1 error C2661: 'std::vector<_Ty>::insert' : no overloaded function takes 1 arguments c:\users\elliot\documents\visual studio 2012\projects\graph\graph.cpp 25 1 Project1
Error 2 error C2661: 'std::vector<_Ty>::insert' : no overloaded function takes 1 arguments c:\users\elliot\documents\visual studio 2012\projects\graph\graph.cpp 27 1 Project1
答案 0 :(得分:2)
我认为我可以在评论中说清楚,但让我们更详细一点。你有一个地图矢量。您正尝试将一对值插入到地图矢量中。那当然不可能(这不是python)。你应该做什么和能做什么是这样的:
adjList[0].insert(make_pair(v1, weight));
或您需要插入内容的任何其他索引。
检查this。
我猜的是以下内容。您的每个节点都是一个数字(它的id是一个整数)。因此,使用该数字,您可以索引向量并获取它的邻接列表。邻接列表是一张地图。映射中的每个条目都是另一个邻居的id,可能是边缘的长度。因此,例如,如果你想要ID为3的节点的邻居,你会要求adjList [2](它们可能从0索引)并得到它的邻居的地图。
答案 1 :(得分:0)
insert
成员函数有两个参数:位置和值。如果您不关心指定位置,那么只需使用push_back
函数即可。您可能还有其他问题,例如类型问题,但这是您的直接问题。
你不应该认为编译器说的是胡言乱语。它告诉你究竟出了什么问题:
没有重载函数需要1个参数
快速前往handy reference,看看它是对的:
iterator insert (const_iterator position, const value_type& val);
iterator insert (const_iterator position, size_type n, const value_type& val);
template <class InputIterator>
iterator insert (const_iterator position, InputIterator first, InputIterator last);
iterator insert (const_iterator position, value_type&& val);
iterator insert (const_iterator position, initializer_list<value_type> il);