c++ - 我如何将 map 的反面复制到另一张 map ?

标签 c++ stl map iterator copy

例如 map1 给出了 1 到 10 的值和一些地址(从开始到结束)。 我想要 10 到 1 的值与 map2 中的相应地址(从开始到结束)

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。 请帮我找出答案....

最佳答案

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

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

  • key 的值,以及
  • Compare类作为模板参数传递给 map

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

关于c++ - 我如何将 map 的反面复制到另一张 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9636245/

相关文章:

list - 如何将值从gsp中的 map 列表传递给 Action ?

android - 识别在 Android 中点击的图像区域?

c++ - 对在这个嵌套循环中使用 break 感到困惑

c++ - 段错误 chkstk_ms C++

android - MapView setCenter() 无法正常工作

c++ - 只计算递增次数的输出迭代器?

c++ - 来自 STL 的 vector 与列表 - 删除方法

c++ - C++串口发送数据和读取数据的方法

c++ - 像C#这样写代码合法吗?

c++ - 迭代器有效性,在 std::set 中调用 erase() 之后