Lui*_*nes 4 c++ iterator stl vector c++11
我想从一个std::unordered_multimap<uint, T> lookup
到一个std::vector<T> v
到目前为止我试过了
std::vector<T> v(lookup.begin(), lookup.end());
Run Code Online (Sandbox Code Playgroud)
但它显然不起作用,因为生成的迭代器begin()
和end()
类型pair<uint, T>
,所以最快的正确方法是什么?
谢谢您的帮助!
提取std::pair
哈希映射中的值部分并将其放入向量中:
#include <iostream>
#include <unordered_map>
#include <vector>
int main() {
using Map = std::unordered_multimap<int, int>;
auto m = Map { {1, 1}, {1, 2}, {1, 3}, {2, 4}, {2, 5}, {3, 6} };
std::vector<int> v;
v.reserve(m.size());
for (auto const& elem : m)
v.push_back(elem.second);
for (auto const& elem : v)
std::cout << elem << "\n";
}
Run Code Online (Sandbox Code Playgroud)
请注意,使用C++ 11,您可以使用ranged for-loop + auto
以避免必须显式表达地图元素的类型.此外,您还可以使用initializer-list语法快速初始化地图.
注意:在实际示例中,请使用reserve()
向量上的内容,以避免过多的内存分配.
实例.
试试这个:
std::vector<T> v;
v.reserve(lookup.size()); // optimization (allocate enough memory for all elements)
std::transform(std::begin(lookup), std::end(lookup), std::back_inserter(v),
[](const std::pair<uint, T>& p) { return p.second; });
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
383 次 |
最近记录: |