Ich habe einen boost :: multi_index Container. Könnte mir jemand sagen, wie man eine Reihe von Iteratoren basierend auf einem bestimmten Schlüssel abruft? Nach stundenlanger Suche bekam ich die Idee, dass lower_bound oder outer_bound den Trick machen sollte, aber ich habe immer noch kein Beispiel. Im folgenden Beispiel möchte ich alle Iteratoren mit einem Preis zwischen 22 und 24 erhalten. Vielen Dank.Wie findet man alle Treffer boost :: multi_index mit einem Schlüssel?
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));
}
Kühl. TIL über die 'range()' -Mitgliedsfunktion. Wie konnte ich es so lange verpasst haben? Ich würde übrigens 'for (auto & el: boost :: make_iterator_range (order_book.get() .range (...))) {...} verwenden –
sehe