C++ 如何在复合键控boost多索引容器的一个键上执行相等的_范围,在第二个键上执行下限?

C++ 如何在复合键控boost多索引容器的一个键上执行相等的_范围,在第二个键上执行下限?,c++,boost-multi-index,C++,Boost Multi Index,假设我有一个类来保存传感器测量值,我创建了一个boost多索引容器,其中包含每个测量值的时间和id的复合键: namespace { struct ValueUpdateMsg { double value; uint64_t time; int id; }; struct time_id { }; struct id_time { }; using value_set_t = bmi::

假设我有一个类来保存传感器测量值,我创建了一个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的值范围
并执行线性(或二进制)搜索以查找时间与查询匹配的节点。在boost多索引中有更好的方法吗?

auto id2\u range=boost::make\u iterator\u range(
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))
);
container.get()下限(2), container.get()上限(std::make_元组(2,4)) );
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))
);