multi_index_container::range()メンバ関数を使用することによって、指定範囲の値を取り出すことができます。
range()で返されるのは、範囲を示すイテレータのpairですが、
Boost.Rangeはイテレータのpairも扱うことができるのでRange AlgorithmやBoost.Foreachに適用することができます。
#include <iostream> #include <boost/multi_index_container.hpp> #include <boost/multi_index/ordered_index.hpp> #include <boost/lambda/lambda.hpp> #include <boost/range/algorithm/for_each.hpp> using namespace boost::multi_index; namespace bll = boost::lambda; void disp(int x) { std::cout << x << std::endl; } int main() { multi_index_container<int> c; for (int i = 0; i < 10; ++i) c.insert(i * 3); boost::for_each(c.range(5 <= bll::_1, bll::_1 <= 20), &disp); }
6 9 12 15 18
また、range()にはunboundedを指定することによって、抽出条件のどちらかを省略することができます。
c.range(unbounded, bll::_1 <= 20); // x <= 20 c.range(5 <= bll::_1, unbounded); // 5 <= x
両方にunboundedも指定はできますが、とくに使い道はないでしょう。