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

时间:2012-03-09 15:03:22

标签: c++ stl map iterator copy

例如,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++;
 }

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

3 个答案:

答案 0 :(得分:8)

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

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

  • 密钥的值,
  • Compare类作为模板参数传递给map

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

答案 1 :(得分:1)

这是不可能的,因为std::map有序的关联容器。如果要保留插入顺序,请使用其他容器,例如std::liststd::vector

答案 2 :(得分:0)

通过增加值(按运算符&lt;所示)进行排序,因此无论您如何插入元素,它们都将按排序顺序返回。你当然是在反向插入,但放置的每个元素都按照正确的升序排列。