私はboost :: multi_indexコンテナを持っています。誰かが特定のキーに基づいて一連のイテレータを取得する方法を教えてもらえますか?数時間の検索の後、私はlower_boundまたはupper_boundがトリックを行うべきであるという考えを持っていましたが、まだ例はありません。次の例では、22と24の間の価格ですべてのイテレータを取得したいと考えています。ありがとうございました。すべての一致を見つける方法キーを使ってboost :: multi_index?
struct order
{
unsigned int id;
unsigned int quantity;
double price;
order(unsigned int id_, unsigned int quantity_, double price_)
:id(id_), quantity(quantity_), price(price_){}
}
typedef multi_index_container<
order,
indexed_by<
ordered_unique<
tag<id>, BOOST_MULTI_INDEX_MEMBER(order, unsigned int, id),
std::greater<unsigned int>>,
ordered_non_unique<
tag<price>,BOOST_MULTI_INDEX_MEMBER(order ,double, price)>
>
> order_multi;
int main()
{
order_multi order_book;
order_book.insert(order(/*id=*/0, /*quantity=*/10, /*price=*/20));
order_book.insert(order(/*id=*/1, /*quantity=*/11, /*price=*/21));
order_book.insert(order(/*id=*/3, /*quantity=*/12, /*price=*/22));
order_book.insert(order(/*id=*/2, /*quantity=*/1, /*price=*/22));
order_book.insert(order(/*id=*/4, /*quantity=*/1, /*price=*/23));
order_book.insert(order(/*id=*/5, /*quantity=*/1, /*price=*/24));
order_book.insert(order(/*id=*/6, /*quantity=*/1, /*price=*/24));
order_book.insert(order(/*id=*/7, /*quantity=*/1, /*price=*/26));
}
Cool。 'range()'メンバ関数についてはTILを参照してください。どうして私はそんなに長い間それを見逃すことができましたか?ところで、 'for(auto&el:boost :: make_iterator_range(order_book.get().range(...))){...}'を使っています –
sehe