我如何将地图的反转复制到另一张地图?

Raj*_*Raj 2 c++ iterator stl copy map

例如,map1使用某个地址(从头到尾)给值1到10.我希望在map2中具有相应地址的值10到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++;
 }
Run Code Online (Sandbox Code Playgroud)

我试过上面一个,但我只得到值1到10 ..我期望的值10比1.请帮我找出....

das*_*ght 8

STL映射是一个有序容器.迭代期间获得的项目顺序与将项目插入容器的顺序无关.

迭代的顺序由两件事决定:

  • 键的值,和
  • Compare作为模板参数传递的类map

您可以按相反的顺序迭代地图(您的代码段显示您已经知道它是如何完成的).反向迭代地图的性能损失(如果有的话)可以忽略不计.您还可以提供非默认值Compare(std::greater<long>而不是默认值std::less<long>)以更改默认的迭代顺序.