如何在不复制地图的情况下传输列表中的内容

时间:2013-02-28 16:19:08

标签: c++ stl

我有map<double, vector<double>>myMap相当大。我想将myMap[.].second的内容放在list<vector<double> >vector<vector<double> >中。是否可以在不明确复制每个vector元素的情况下执行此操作?我希望它可以用iterators

来实现
#include <iostream>
#include <vector>
#include <map>
using namespace std;

int main()
{
    double v_value[] = {1.1,2.4};
    vector<double> v(v_value, v_value + sizeof(v_value)/sizeof(double));

    map<double,vector<double> > myMap;
    myMap[10.01] = v;
    myMap[14.62] = v;
}

1 个答案:

答案 0 :(得分:5)

在c ++ 03中,您可以对地图中的每个向量使用std::vector::swap到列表中的空向量。在C ++ 11中,您可以从一个移动到另一个。两者都避免复制,但显然修改了源地图。

std::map<double, vector<double> > m = ....;
std::list<std::vector<double> > l(size_of_map); // list full of empty vectors
// iterate over map
typedef std::map<double, vector<double>>::iterator map_iter;
size_t list_counter = 0;
for(map_iter it = m.begin(); it != m.end(); ++it) {
    l[list_counter].swap(it->second);
    ++list_counter;
}

在C ++ 11中:

std::map<double, vector<double>> m = ....;
std::list<std::vector<double>> l; // empty list

for(auto it = m.begin(); it != m.end(); ++it) {
    l.push_back(std::move(it->second));
}