为什么排序不适用于 Map 中的迭代器?



这是我的代码;我发现这个排序对这个图中的向量不起作用。有人知道为什么吗?

该代码的输出仍然是"0";3 1 2 4 5";

map<int, vector<int> > values;
values[1] = {3,1,2,4,5};
for(auto g: values) {
sort(g.second.begin(), g.second.end());
}
for(int i=0;i<values[1].size();i++) {
cout<<values[1][i]<<" ";
}

您需要在基于范围的循环中使用引用类型

for(auto &g: values) {
sort(g.second.begin(), g.second.end());
}

否则,基于范围的for循环处理映射中存储的元素的副本。

如果您的编译器支持C++17,您也可以编写

#include <vector>
#include <map>
#include <iterator>
#include <algorithm>
//...
for (auto &[key, v] : values)
{
std::sort( std::begin( v ), std::end( v ) );
}

auto g: values采用values的元素的值,但不允许更改values中的内容。

auto &g: values引用values的一个元素,该元素允许您更改values的内容

最新更新