C ++中的分层筛选查找

时间:2013-06-21 03:50:23

标签: c++ data-structures filter associative

我一直在思考数据结构问题,但似乎无法找到一个好的解决方案。我不能摆脱解决方案很简单的感觉,但我只是没有看到它,所以希望你们能帮忙!

问题是:我在内存中有大量对象。它们中的每一个都有许多数据字段。某些数据字段(如ID)对于每个对象都是唯一的,但其他数据字段(如名称)可以显示在多个对象中。

class Object {
    size_t id;
    std::string name;
    Histogram histogram;
    Type type;
    ...
};

我需要以允许我快速(即使对象的数量相对较大,即数百万)的方式组织这些对象,在给定任意数量的对象成员的规范的同时过滤集合,而所有成员都是未指定计数为通配符。例如,如果我指定给定的name,我想要检索名称成员等于给定名称的所有对象。但是,如果我然后向查询添加直方图,我希望查询仅返回namehistogram字段中匹配的对象,依此类推。所以,例如,我想要一个函数

std::set<Object*> retrieve(size_t, std::string, Histogram, Type)

可以做到

retrieve(42, WILDCARD, WILDCARD, WILDCARD)

以及

retrieve(42, WILDCARD, WILDCARD, Type_foo)

第二次调用将返回的次数少于或等于第一次调用的对象数量。哪种数据结构允许这样的查询,并且可以在合理的时间内构建和查询数百万的对象计数?

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

首先,您可以使用Boost Multi-indexObject的不同成员实施有效查找。这可能有助于限制要考虑的元素数量。作为第二步,您可以简单地使用lambda表达式为std::find_if实现谓词以获取第一个元素,或使用std::copy_if将所有元素复制到目标序列。如果您决定使用提升,则可以使用带有filtering的提升范围。

相关问题