重载Boost Multi_Index查找操作

时间:2014-03-08 14:05:01

标签: c++ search boost iterator multi-index

我在共享内存中有一个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 ++。

1 个答案:

答案 0 :(得分:1)

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