Copy std::map into std::vector of pairs

  • A+

I'm trying to copy a map into a vector of pair, so I can then sort the vector by the second data member of the pairs. I have resolved this doing like this:

void mappedWordsListSorter(){   for (auto itr = mappedWordsList.begin(); itr != mappedWordsList.end(); ++itr){     vectorWordsList.push_back(*itr);   }   sort(vectorWordsList.begin(), vectorWordsList.end(), [=](pair<string, int>& a, pair<string, int>& b){return a.second > b.second;}); } 

I need to find a way to do this without using a raw loop, using the standard library instead. I have come across a lot of examples doing this by only transferring either the keys or the values of the map. I need to copy into a vector of pairs<string, int>. What is the best way to do it?


Just use std::vector's assign member function.

//no need to call reserve, bidirectional iterators or better will compute the size and reserve internally. vectorWordsList.assign(mappedWordsList.begin(), mappedWordsList.end()); 

If you have existing values in the vector that you don't want overwritten then use insert instead like

vectorWordsList.reserve(vectorWordsList.size() + mappedWordsList.size()); // make sure we only have a single memory allocation vectorWordsList.insert(vectorWordsList.end(), mappedWordsList.begin(), mappedWordsList.end()); 


:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: