Ваш код выглядит так, как будто он будет работать на первый взгляд.Однако есть гораздо более простой способ сделать это:
Я не оценил ваш код, но, безусловно, есть гораздо более простой способ сделать то, что вы хотите, встроенный в большинство реализаций STL:
vecContents.resize(mapContents.size());
std::transform(mapContents.begin(), mapContents.end(), vecContents.begin(),
select1st<pair<const char, int> >());
В качестве альтернативы:
vecContents.resize(mapContents.size());
std::transform(mapContents.begin(), mapContents.end(), vecContents.begin(),
select1st<mapinfo::value_type>());
Хотя есть 1 складка - select1st является расширением SGI.Это почти во всех реализациях STL, но где меняется.Для GNU вы должны сделать:
#include <ext/functional>
using __gnu_cxx::select1st; // or just using namespace __gnu_cxx;
См. этот ответ для использования его в Visual Studio.