gpt4 book ai didi

c++ - 如何在复合键控提升多索引容器的一个键上执行 equal_range 并在第二个键上执行 lower_bound?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:39:30 26 4
gpt4 key购买 nike

假设我有一个类来保存传感器测量值,我创建了一个 boost 多索引容器,其中包含时间的复合键和每个测量值的 id:

namespace {
struct ValueUpdateMsg {
double value;
uint64_t time;
int id;
};

struct time_id {
};
struct id_time {
};

using value_set_t = bmi::multi_index_container<
ValueUpdateMsg,
bmi::indexed_by<
bmi::ordered_unique<
bmi::tag<struct id_time>,
bmi::composite_key<ValueUpdateMsg,
bmi::member<ValueUpdateMsg, decltype(ValueUpdateMsg::id), &ValueUpdateMsg::id>,
bmi::member<ValueUpdateMsg, uint64_t, &ValueUpdateMsg::time>

>
>,
bmi::ordered_unique<
bmi::tag<struct time_id>,
bmi::composite_key<ValueUpdateMsg,
bmi::member<ValueUpdateMsg, uint64_t, &ValueUpdateMsg::time>,
bmi::member<ValueUpdateMsg, decltype(ValueUpdateMsg::id), &ValueUpdateMsg::id>
>
>
>
>;
}


value_set_t container;

container.insert(ValueUpdateMsg{1, 0, 1.0});
container.insert(ValueUpdateMsg{1, 1, 2.0});
container.insert(ValueUpdateMsg{3, 0, 3.0});
container.insert(ValueUpdateMsg{3, 2, 4.0});
container.insert(ValueUpdateMsg{5, 0, 5.0});
container.insert(ValueUpdateMsg{5, 1, 6.0});

我想找到 id=2 且更新时间小于等于 4 的节点。我如何在 boost-multi-index 容器中做到这一点?

我可以执行以下操作:

auto id2_range = boost::make_iterator_range(container.get<id_time>().equal_range(std::make_tuple(2)));

获取 id == 2 的值范围并执行线性(或二进制)搜索以找到其时间与查询匹配的节点。在 boost multi-index 中有更好的方法吗?

最佳答案

auto id2_range = boost::make_iterator_range(
container.get<id_time>().lower_bound(2),
container.get<id_time>().upper_bound(std::make_tuple(2,4))
);

关于c++ - 如何在复合键控提升多索引容器的一个键上执行 equal_range 并在第二个键上执行 lower_bound?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54338727/

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