重载Boost Multi_Index查找操作

Overloading Boost Multi_Index find operation

本文关键字:查找 操作 Index Boost Multi 重载      更新时间:2023-10-16

我在共享内存中有一个boost Multi_index容器,它保留了一些数据,以便在同一台机器上由多个进程执行快速搜索。

typedef multi_index_container<
    MyData, 
        indexed_by<    
            random_access<>,  // keep insertion order
            ordered_non_unique< member<MyData, time_t, &MyData::timestamp> >
        > 
> myContType;

我想通过时间戳属性在这个容器中执行搜索像这样:

myContType_by_time& idIndex = myCont.get<1>();
    myContType_by_time::iterator itTime = idIndex.find(timestamp);

但问题是我并不是在寻找完全匹配的。我要搜索的是其前导值小于搜索时间的第一个项。

让我举个例子,假设在我的容器中有这样的项(按插入顺序):

    1       2       3      4       5       6
{109345, 109348, 109352, 109355, 109358, 109362, }

,当我使用109354执行搜索时,我期望找到项目4,因为它是其前身小于搜索条件的第一个项目。

是否有可能实现这种特殊的搜索机制,用索引来快速搜索,而不是搜索整个数组,逐个查找条件?(数组可以有超过100000个条目)

谢谢。

不是:我正在使用Visual Studio 2008 vc++ .

myContType_by_time::iterator itTime = idIndex.lower_bound(timestamp);
if(itTime!=idIndex.begin())--itTime;