You can alternatively use emplace or emplace_back. Instead getting the source to copy into the containers, it pass the parameters to the constructor of the object.
When using make_pair, a std:

air<a, b> is created and a copy of the pair is created, instead when using emplace/emplace_back a reference to the a and b object is done on the constructor of the value_type object.