2011-05-17 3 views
-2

マップにアイテムを挿入しようとしていますが、これには2つのマップがあります。2つ以上のマップを保持するマップにアイテムを挿入

map< map<int, int> , map<int, int> > GC; 

map<int, int> A; 
A.insert(pair<int,int>(1,1)); 
map<int, int>:: iterator p1 = A.begin(); 

map<int, int> B; 
B.insert(pair<int,int>(2,3)); 
map<int, int>:: iterator p2 = B.begin(); 

GC.insert(pair< map<int,int>, map<int,int> > (*p1, *p2)); 

まあ、それは動作しないと推定されます。

どうすればよいですか?

EDIT:
それは次のエラーを与える:

E:\CB\test.cpp|20|error: no matching function for call to 'std::pair<std::map<int, int, std::less<int>, std::allocator<std::pair<const int, int> > >, std::map<int, int, std::less<int>, std::allocator<std::pair<const int, int> > > >::pair(std::pair<const int, int>&, std::pair<const int, int>&)'

+3

マップはキーと値で動作します。マップをキーとして使うつもりですか?それは私には奇妙に思えるかもしれませんが、おそらくあなたはそうしたいと考えている正当な理由があります。どのような問題を解決しようとしているのか説明すれば、より良いデータ構造を設計するのに役立つかもしれません。 – Nathanael

+2

これは邪悪な疑似コードです。 IIRCには演算子<またはstd :: less >がありません。したがって、注文したコンテナで幸運なことをすることはありません。 – sehe

+0

私は自分でグラフクラスを作成しようとしています。私が作りたい構造は、map <(EdgeWeight1、VertexIndexValue1)、(EdgeWeight2、VertexIndexValue2)......>です。 keyValueは、一時ストレージのためのものです。たとえば、ダイクストラのアルゴリズムの頂点に値を設定する必要がある場合などです。さて、私たちは、頂点B(アルファベット順2)とC(3)を重み15と20で接続した頂点Aから始めています。次に、保存したいデータは>(0,1)、{(15 、3)、(20,4)} –

答えて

1

私はここで達成しようとしているかわからない.....

あなたのキーと値があることが必要仕事をするために、マップオブジェクト...その場合 唯一の可能性は

GC.insert(pair< map<int,int>, map<int,int> > (A,B)); 
+4

'make_pair'は非常に便利です。答えは 'GC.insert(make_pair(A、B));'と書くことができます。 –

0

であるI Edgeオブジェクトのリスト/ベクトルを持つNodeクラスが本当に必要だと思います。各Edgeオブジェクトには、エッジの重みと、そのエッジに接続されているノードへのポインタが含まれます。

私が記述したよりもグラフを作成する方が良いかもしれませんが、正しい方向に考えてください。

0
map<keyValue, VertexIndexValue>, map<(EdgeWeight1,VertexIndexValue1), (EdgeWeight2,VertexIndexValue2)......> 

あなたが望むのは、マップの2番目の要素として構造体を使用することです。それはあなたが混乱を招くことなく、あなたが望むものを地図に保持する機会を与えます。

struct sMapValue 
{ 
    int mVertIndex; 
    map<int, int> mVertEdgeMap; 
}; 

map< int, sMapValue> GC; 
関連する問題