У меня есть пара итераторов, возвращенных из вызова multimap equal_range. Я хочу использовать их для создания подмножества в виде вектора пар. Можно ли это сделать элегантно, пожалуйста?
Причина, по которой я хочу использовать его как вектор, заключается в том, что я могу легче извлекать данные на основе его индекса (положение в контейнере).
Используя конструктор диапазона итератора std::vector
:
auto p = mul_map.equal_range(...);
std::vector<mul_map_type::value_type> v(p.first, p.second);
Для эффективности может быть целесообразно хранить только указатели или итераторы в векторе, чего легко добиться с помощью Boost.Range:
#include <boost/range/counting_range.hpp>
auto p = mul_map.equal_range(...);
auto iters = boost::counting_range(p.first, p.second);
std::vector<mul_map_type::(const_)iterator> v(iters.begin(), iters.end());
Других решений пока нет …