samedi 18 avril 2015

flatten vectors in a map

In C++, I have a map < int, vector < double > > or map < int, vector < some_Struct > >, I need to concatenate the vectors in this map and return the result.


The first version of the function is below:



#include <algorithm>
#include <vector>

vector < double >
flattenRecords(const map < int, vector < double > > & selected, int num_kept_reps)
{
vector < double > records;
int cnt = 0;
for (auto it = selected.begin(); it != selected.end(); ++it) {
records.insert(records.end(),
make_move_iterator(it->second.begin()),
make_move_iterator(it->second.end()));
cnt += 1;
if (cnt >= num_kept_reps)
break;
}
return records;
}


I know this is not what I intended to do, because I would like to keep the data in the map, and thus should not use make_move_iterator.


The codes can compile using g++ (GCC) 4.4.7 with the -std=c++0x flag.


So here is the question, I declare the map to be const, what happens when I try to use something like std::move to the vector in the map?


My second version is to use:



copy(it->second.begin(), it->second.end(), back_inserter(records));


I guess this does what I intend to do.


I am quite new to C++. The STL gives me a feeling of coding in python so I would like to try it.


Aucun commentaire:

Enregistrer un commentaire