我正在尝试将 map 复制到 vector 对中,因此可以按 vector 对中second数据成员对 vector 进行排序。我已经这样解决了:

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>的 vector 中。最好的方法是什么?

最佳答案

只需使用std::vector assign 成员函数。

//no need to call reserve, bidirectional iterators or better will compute the size and reserve internally.
vectorWordsList.assign(mappedWordsList.begin(), mappedWordsList.end());

如果您不希望覆盖 vector 中的现有值,请改用 insert
vectorWordsList.reserve(vectorWordsList.size() + mappedWordsList.size()); // make sure we only have a single memory allocation
vectorWordsList.insert(vectorWordsList.end(), mappedWordsList.begin(), mappedWordsList.end());

09-06 22:04