适合表示和处理多对多通信的数据结构
我需要处理2个面向消息流的匹配;其中一个流中的实体可以匹配另一个流中的多个,反之亦然。
插入和检索不会频繁,但是对数据域(“包含”)中是否存在实体的评估将非常频繁。
我对python特别感兴趣 - 但我想它同样适用于任何编程语言
任何指向正确方向的人都会受到赞赏。
答案 0 :(得分:1)
假设你有两套,a和b。地图中的元素到b中的元素,反之亦然。
您可以使用类似图形的数据结构(邻接列表)
# this maps elements in a to elements in b (elements of a are the keys)
# each element of a maps to several elements of b (as a list)
a2b = {
'a' : [1,2,3]
}
# this maps elements in b to elements in a (elements of b are the keys)
# each element of bmaps to several elements of a (as a list)
b2a = {
1 : ['a'],
2 : ['a'],
3 : ['a'],
}
你基本上有一个列表字典。 'a'在左右方向上映射到1,2,3,而1,2,3在另一个方向上映射到'a'(在本例中)。您可以将元素映射到任意数量的其他元素,反之亦然。
要查找域,您可以使用字典的键。在上面的示例中,您可以执行此操作:
>>> print 1 in b2a
True
>>> print 'a' in b2a
False
要检查您的域中是否有elem
(在以下示例中,如果{b}中有elem
),您只需执行
elem in b2a
检查元素是否在一个集合内部非常快,这就是你想要的。