2012-03-09 11 views
2

たとえば、map1は1〜10の値をいくつかのアドレスで指定しています(末尾が始まります)。 私は1の上にしようとしたが、期待値only..my 10に10助けてください 1には値1を取得していますマップの逆を別のマップにコピーする方法はありますか?

map<long , int* > v; 
map<long , int* > rv; 

int i,a[10]; 
for(i=0; i<10; i++) 
{ 
a[i] = i+1; 
v.insert(pair<long, int *>(i+1,&a[i])); 
} 
itr = v.begin(); 
while(itr != v.end()) 
{ 
cout << itr->first << " "<<itr->second; 
cout << endl; 
itr++; 
} 
rv.insert(v.rbegin(),v.rend()); 
cout << "copied array: "<<endl; 
itr = rv.begin(); 
while(itr != rv.end()) 
{ 
cout << itr->first << " "<<itr->second; 
cout << endl; 
itr++; 
} 

(最後に始まる)MAP2内の対応するアドレスの値10を1にしたいです私を見つける....

+0

ペア tempPair;ロングx = 0; int * p = NULL;マップ :: reverse_iterator r = v.rbegin(); while(r!= v.rend()){x = r-> first; p =(int *)r-> second; cout << x << "" << p; cout << endl; tempPair(x、p); rv.insert(tempPair); r ++; }このようにしてみましたが、エラーが発生しました。 "エラー:呼び出しが一致しません '(std :: pair )(long int&、int *&)'コンパイル終了" – Raj

+2

マップはその鍵。 – PlasmaHH

+0

@Raj:あなたのコメントのエラーは、あなたが実際に初期値を持つ前に 'tempPair'をCスタイルで早すぎると定義しているためです。初期値のときに ' tempPair(x、p)'ペアを書くだけで定義してください。 – MSalters

答えて

8

STLマップは、注文されたコンテナです。反復処理中に取得するアイテムの順序は、アイテムをコンテナに挿入する順序とは関係ありません。あなたは繰り返すことができmap

にテンプレートパラメータとして渡さ

  • キーの値、および
  • Compareクラス:

    反復の順番は二つのことによって決定されます逆の順序で地図を表示します(コードスニペットでは、どのようにして完了したかが分かります)。マップを逆反復するパフォーマンスペナルティは無視されます。また、既定以外のCompare(デフォルトのstd::less<long>の代わりにstd::greater<long>)を指定して、既定の繰り返し順序を変更することもできます。

+1

"デフォルト以外の比較を提供することもできます"。このソリューションの実装はこちらです(http://ideone.com/6phnN)。 –

+0

@Robありがとう.. – Raj

0

(オペレータ<のように)値を増やしてソートするので、要素をどのように挿入してもソート順に返されます。あなたは確かに逆の挿入を行っていますが、配置されたすべての要素は適切な昇順に正しくソートされています。

1

std::mapであり、これは連想コンテナであるため不可能です。挿入順序を保持する場合は、std::listまたはstd::vectorなどの他のコンテナを使用します。

関連する問題