【问题标题】:Why doesn't sorting work for an iterator in Map?为什么排序不适用于 Map 中的迭代器?
【发布时间】:2023-03-14 12:02:01
【问题描述】:

这是我的代码;我发现排序不适用于此地图中的矢量。有谁知道为什么?

这段代码的输出仍然是“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]<<" ";
}

【问题讨论】:

  • auto g 更改为auto&amp; g 以找出答案:-) demo
  • 另外,考虑为 cout 循环使用 range-for 循环:for(auto value : values[1]) { cout &lt;&lt; value &lt;&lt; " "; }

标签: c++ algorithm sorting vector range-based-loop


【解决方案1】:

你需要在基于for循环的范围内使用引用类型

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 ) );
}

【讨论】:

    【解决方案2】:

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

    auto &amp;g: values 采用引用values 的元素,它允许您更改values 的内容

    【讨论】:

      猜你喜欢
      • 2017-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-15
      • 2012-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多