Вы можете инициализировать вектор, задав ему два итератора, например:
std::multimap<std::string, std::string> bar;
...
std::vector<pair<string,string> > foo(bar.lower_bound("123"), bar.upper_bound("123"));
но это даст вам вектор пар (т. Е. С ключом и значением).
Другой вариант - использовать std::copy
с чем-то вроде back_inserter, что является еще одним способом скрыть цикл, но с тем же недостатком, что и выше.
std::copy(bar.lower_bound("123"), bar.upper_bound("123"), std::back_inserter(foo));
Это добавит элементы (если они есть) к вектору foo.
Что касается извлечения только значений, я не могу придумать иного способа, кроме как зациклить результаты, поскольку я не знаю стандартного способа вывести только значение из диапазона.