gpt4 book ai didi

c++ - 如何用一个键找到所有匹配的 boost::multi_index?

转载 作者:行者123 更新时间:2023-11-28 02:07:07 26 4
gpt4 key购买 nike

我有一个 boost::multi_index 容器。谁能告诉我如何根据某个键检索一系列迭代器?经过几个小时的搜索,我想到 lower_bound 或 upper_bound 应该可以解决问题,但我仍然没有得到示例。在下面的示例中,我想获得所有价格在 22 到 24 之间的迭代器。非常感谢。

 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));

}

最佳答案

您所追求的范围是 [lower_bound(22),upper_bound(24)),即:

auto first=order_book.get<price>().lower_bound(22);
auto last=order_book.get<price>().upper_bound(24);
for(;first!=last;++first)std::cout<<first->id<<" "; // prints 3 2 4 5 6

如果您难以确定何时需要使用 lower_upper_bound,可以使用 range member function。这可能更容易正确(并且速度稍快):

auto range=order_book.get<price>().range(
[](double p){return p>=22;}, // "left" condition
[](double p){return p<=24;}); // "right" condition
for(;range.first!=range.second;++range.first)std::cout<<range.first->id<<" ";

前提是您使用 C++11 并具有 lambda 函数。您也可以在 C++03 中使用 range 而不使用原生 lambda 函数,但是您必须求助于 Boost.Lambda或者手写 range 接受的仿函数,这两种选择都可能太麻烦了。

关于c++ - 如何用一个键找到所有匹配的 boost::multi_index?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37076458/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com