首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Boost Multi-Index搜索多个信息

用Boost Multi-Index搜索多个信息
EN

Stack Overflow用户
提问于 2009-11-30 17:48:39
回答 2查看 2.3K关注 0票数 3

如何根据上一次搜索的结果限制boost::multi_index中的搜索?举个例子:假设我有一个rectangle类,它的内部值如下:

代码语言:javascript
复制
    class MyRect
    {
    public:
        int    width;  
        int    height; 

        double value;
    }

我需要这样一个对象的数据结构来回答这样的查询:“给定一个input_rectangle -哪个对象MyRect包含在该矩形中,并且具有最高的值?”

我可以使用像这样的'multi_index‘:

代码语言:javascript
复制
    struct given_value{};
    struct given_width{};
    struct given_height{};

    typedef multi_index_container<MyRect,
        indexed_by<
            ordered_non_unique< tag<given_value>, 
                member<MyRect, double, &MyRect::value>,
            ordered_non_unique< tag<given_width>, 
                member<MyRect, int, &MyRect::width>,
            ordered_non_unique< tag<given_height>, 
                member<MyRect, int, &MyRect::height>, >
        >
    > MyDataStructure;

    typedef MyDataStructure::index<given_width>::type MyDataStructureGivenWidth;
    typedef MyDataStructureGivenWidth::iterator WidthIterator;

如果我的input_rectangle有宽度input_width,我可以使用如下代码:

代码语言:javascript
复制
WidthIterator start_iter = data_object.get<given_width>().begin();
WidthIterator end_iter   = data_object.get<given_width>().upper_bound(input_width);

但是我如何限制两个给定迭代器对coresp高度的搜索呢?(然后查找该结果中具有最高值的对象?)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-11-30 19:56:42

我不认为你可以做一个原地限制。

将匹配宽度查询的结果迭代器存储在另一个容器中,并使用该容器通过remove_if查找匹配的高度。然后使用max_element查找最大的。

如果将元素存储为指针,则可以使用相同的MIC来存储结果。

票数 0
EN

Stack Overflow用户

发布于 2009-11-30 19:38:05

如果我没弄错你的问题,可能会有一个更简单的解决方案。只需将您的MyRects放入按值排序的STL集(需要定义比较运算符或自定义比较函数)。您可以创建一个自定义谓词,并使用该谓词检查给定的MyRect是否在某个范围内。然后使用STL-Algorithm find_if,并将自定义谓词传递给它。如果您确保它以降序遍历序列(例如,通过使用reverse_iterator),它应该返回您正在查找的MyRect。

希望这是可以理解的,并适用于您的问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1818821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档