1

我有一个相当大的map<double, vector<double>>说法。myMap我想把 的内容myMap[.].second放在list<vector<double> >orvector<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;
}
4

1 回答 1

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));
}
于 2013-02-28T16:20:48.553 回答