将一对插入到地图矢量中时出现C ++错误

时间:2013-07-25 04:21:37

标签: c++ visual-c++ visual-studio-2012

我正在尝试使用地图矢量创建图表。我实际上正在查看一本书中的代码并尝试将其输入到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

2 个答案:

答案 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);