例如,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。 请帮我看看......
答案 0 :(得分:8)
STL地图是一个有序的容器。迭代期间获得的项目顺序与将项目插入容器的顺序无关。
迭代的顺序由两件事决定:
Compare
类作为模板参数传递给map
您可以按相反的顺序迭代地图(您的代码段显示您已经知道它是如何完成的)。反向迭代地图的性能损失(如果有的话)可以忽略不计。您还可以提供非默认Compare
(std::greater<long>
而非默认std::less<long>
)以更改默认的迭代顺序。
答案 1 :(得分:1)
这是不可能的,因为std::map
是有序的关联容器。如果要保留插入顺序,请使用其他容器,例如std::list
或std::vector
。
答案 2 :(得分:0)
通过增加值(按运算符&lt;所示)进行排序,因此无论您如何插入元素,它们都将按排序顺序返回。你当然是在反向插入,但放置的每个元素都按照正确的升序排列。