【发布时间】:2019-05-20 03:16:35
【问题描述】:
我正在尝试将地图复制到成对的向量中,因此我可以通过成对的 second 数据成员对向量进行排序。我已经解决了这个问题:
void mappedWordsListSorter(){
for (auto itr = mappedWordsList.begin(); itr != mappedWordsList.end(); ++itr){
vectorWordsList.push_back(*itr);
}
sort(vectorWordsList.begin(), vectorWordsList.end(), [=](pair<string, int>& a, pair<string, int>& b){return a.second > b.second;});
}
我需要找到一种方法来做到这一点,而不使用原始循环,而是使用标准库。我遇到了很多这样的例子,只传输地图的键或值。我需要复制到pairs<string, int> 的向量中。最好的方法是什么?
【问题讨论】:
-
@Lorand - 排序发生在对中的
second项目上,这不是关键。 -
@Lorand 似乎 OP 希望根据值而不是键来执行排序。
-
似乎应该将该问题标记为该问题的副本,因为@NathanOliver 提供的答案比该问题的任何答案都要好。编辑:虽然该问题包括对结果进行排序。
-
@ALX23z - 我同意
[=]不应该出现。但仅仅因为它的存在并不意味着 everything 被复制。 lambda 必须使用来自周围范围的东西来捕获它。 -
@ALX23z 实际上,如果您在 lambda 正文中使用它,它只会复制一个变量。如果您不使用范围内的任何变量,则使用
[=]不会降低性能。
标签: c++ stdvector stdmap c++-standard-library std-pair