1

マップのベクトルを使用してグラフを作成しようとしています。私は実際に本のコードを見て、それをビジュアルスタジオ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));

コンパイルしようとしたときにVisual Studio 2012から得たエラー

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
4

2 に答える 2

2

コメントで明確にできると思ったのですが、もっと詳しくしましょう。マップのベクトルがあります。いくつかの値のペアをマップのベクトルに挿入しようとしています。もちろん、それは不可能です (これは python ではありません)。あなたがすべきこととできることは、次のようなものです:

adjList[0].insert(make_pair(v1, weight));

または何かを挿入する必要があるその他のインデックス。

これをチェックしてください。

私が推測しているのは、次のとおりです。すべてのノードは数値です (ID は整数です)。したがって、その数を使用して、ベクトルにインデックスを付け、その隣接リストを取得します。隣接リストはマップです。マップ内の各エントリは別の近隣の ID であり、おそらくエッジの長さです。たとえば、ID 3 のノードの隣接ノードが必要な場合は、adjList[2] (おそらく 0 からインデックスが付けられている) を要求し、その隣接ノードのマップを取得します。

于 2013-07-25T04:32:48.500 に答える
0

メンバー関数は、位置と値のinsert2 つのパラメーターを取ります。位置を指定する必要がない場合は、push_back関数を使用してください。タイプの問題など、他の問題があるかもしれませんが、これは差し迫った問題です。

コンパイラが意味不明なことを言っていると思い込んではいけません。それは何が間違っていたかを正確に伝えました:

1 つの引数を取らないオーバーロードされた関数はありません

便利なリファレンスに簡単にアクセスして、それが正しかったことを確認してください。

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);
于 2013-07-25T04:24:19.313 に答える