I had two vector’s with the first being the keys and the second being the values. It took a couple tries before I got the STL working for me!

The first thing was to check if the std::map constructors had something useful. It certainly seems like taking two sets of iterators would be a great way to initialize a map. No such luck.

So how about one of the std algorithms to copy the keys and values into the map? std::copy seemed likely but it only takes a single sequence. A little more digging and std::transform. The second version of std::transform takes two sequences, an output iterator, and a binary function to convert the two values from the two sequences into something that can be inserted into the output iterator. Perfect.

So how to turn the two values into a pair suitable for std::map? The std::make_pair
is exactly what is needed. The hard part is getting the syntax so you can pass it as a function: make_pair<std::string,int> in this example.

So the code finally looks like:

#include <map>
#include <vector>
#include <algorithm>
#include <utility>
#include <string>
#include <iterator>
 
void test()
{
		std::map<std::string, int>	m;
		std::vector<std::string>		keys;
		std::vector<int>			values;
 
		std::transform (keys.begin(), keys.end(),
						values.begin(),
						std::inserter (m, m.begin()),
						std::make_pair<std::string,int>);
}