2013-06-21 27 views
0

我一直在琢磨数据结构问题一段时间,但似乎无法提出一个好的解决方案。我不能摆脱这种解决方案很简单的感觉,但我只是没有看到它,所以希望你们能够帮助!C++中的分层过滤查找

这是问题:我在内存中有大量对象集合。他们每个人都有一些数据字段。某些数据字段(如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) 

其中第二通话将返回较少或一样地多对象作为第一个。哪种数据结构允许像这样的查询,并且可以在合理的时间内为数百万的对象计数构建和查询?

感谢您的帮助!

回答

0

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