1

かなり大きいと思いmap<double, vector<double>>ます。の内容をまたはmyMapに入れたいのですが。各要素を明示的にコピーせずにそれを行うことは可能ですか?私はそれがで実行可能であることを望んでいましたmyMap[.].secondlist<vector<double> >vector<vector<double> >vectoriterators

#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

std::vector::swapc ++ 03では、マップ内の各ベクトルに対して、リスト内の空のベクトルに使用できます。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 に答える