设置与Multiset

时间:2013-08-25 19:40:53

标签: c++ set multiset

我想在集合或多集中存储(大约100到1000个)<Object A, Relation R, Object B>类型的不同关系。我希望能够搜索A(A,R),但不能搜索(A,R,B)(并且只有少数(&lt; 5)关系可以搜索A R }和A,所以线性搜索,如果罚款,那么。)

最好将关系存储在一个集合中(按RBA排序),还是将它们存储在由R和{{1}}排序的多集合中{1}}?

编辑: 我查看了哈希表,但是它们的迭代不如(有序)设置迭代那么快,并且模式匹配也需要大量的迭代。 (它必须搜索一次以找到迭代的开始,然后迭代直到完成与同一对象A的所有关系。)

谢谢, 拉格纳

1 个答案:

答案 0 :(得分:0)

从我收集的评论中,您必须为A或对(A,R)查找完全匹配。

如果这是正确的,你可以做的最好的事情是使用两个哈希表:一个用A作为键,另一个用(A,R)作为键。关系本身可以存储在未排序的向量中,索引将它们插入到两个哈希表中。这是您为查找任务获得O(1)复杂性的唯一方法。

对于性能至关重要的是,您有两个独立的索引结构:如果您只使用A作为键,您将获得在查找(A,R)对时必须搜索合适R的对象列表。在相反的情况下,如果您只有(A,R)键,则在O(1)时间内您将无法仅查找某个A。