2012-10-12 111 views
0

我有一對從multimap equal_range調用返回的迭代器。我希望使用這些來創建一個子對象形式的子集。這可以做得高雅嗎?如何從多映射的子集中創建對的向量?

我想它作爲一個矢量是這樣我就可以根據它的索引(在容器中的位置)

回答

6

使用的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()); 
+0

使用C++ 11的'auto'只是爲了簡潔這裏,你總是可以輸入類型。 :) – Xeo