将std ::映射复制到std ::对向量
Copy std::map into std::vector of pairs
我正在尝试将映射复制到配对的向量中,因此我可以通过对的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>
的向量。什么是最好的方法?
只需使用 std::vector
's assign
成员函数。
//no need to call reserve, bidirectional iterators or better will compute the size and reserve internally.
vectorWordsList.assign(mappedWordsList.begin(), mappedWordsList.end());
如果您不想覆盖的向量中有现有值,则使用 insert
代替
vectorWordsList.reserve(vectorWordsList.size() + mappedWordsList.size()); // make sure we only have a single memory allocation
vectorWordsList.insert(vectorWordsList.end(), mappedWordsList.begin(), mappedWordsList.end());
值得注意的是,如果您是为此目的创建向量,则可以直接使用向量的构造函数:
std::vector<std::pair<FirstType,SecondType>> vectorWordsList( mappedWordsList.begin(), mappedWordsList.end() );
在C 17中,您也可以省略向量的模板参数使编译器推断出来:
std::vector vectorWordsList( mappedWordsList.begin(), mappedWordsList.end() );
您可以使用std::copy
和std::back_inserter
:
std::copy(mappedWordsList.begin(),
mappedWordsList.end(),
std::back_inserter(vectorWordsList));
老实说,我认为一个范围-for
循环更清晰:
for(const auto& kv : mappedWordsList)
vectorWordsList.emplace_back(kv);
无论如何,您可以使用std::vector::reserve
在目标vector
上进行预先分配内存,避免不必要的重新分解。
相关文章:
- std::向量与传递值的动态数组
- 如何在旧c++中初始化const-std向量
- 如何检查两个 std::向量在小于 O(n) 的时间复杂度内是否相等
- 当键值是 std 向量时,为什么使用 at in C++ 访问映射值如此缓慢?
- 如何初始化 std::向量的映射?
- 迭代时将指向differents类型的指针保存在std::向量中
- std::向量迭代器和调整大小/保留的奇怪/有趣行为
- yaml-cpp到std::向量迭代的怪异行为
- 故意泄漏std::向量的内存
- 调整STD ::向量的大小是否可以降低其能力
- std ::向量距离函数如何给出比.size()更高的值
- C++ std::向量插入两个元素替代算法失败
- 错误:数字常数之前的预期无限制ID:std :: array和std ::向量大小分配
- 在我提供的此示例中,如何将2维std ::向量的逻辑更改为具有向量[row] [col] [col] [col] [co
- GUI滑块的动态数量,该数量更新具有回调中值的std ::向量
- 是一个std ::向量线程,我的目的是安全的
- 将具有std ::向量的C 函数称为Julia的输入和输出参数
- 将std ::向量作为指针参考
- STD ::向量如何调整其内部缓冲区大小
- 在C 中,是否有可能在不兼容类型的std ::向量对象之间传输不同类型的缓冲区