你会如何解决这个问题? (一开始看起来很简单,然后我发现它令人费解)。
我一直在考虑许多安排,包括哈希映射,列表和多重映射......但是所有这些都缺乏速度或简单性,或者其他东西。你会做什么?
答案 0 :(得分:2)
我认为您要创建一个名为“Subscription”的类,它表示从Executor到Manager的单个订阅,其中包含有关此订阅将在何种条件下触发的信息,以及此订阅的某种GUID或名称。我在想像
class Subscription
{
GUID g;
A_filter a;
B_filter b;
Executor *e;
}
Subcription还有一个方法来“检查”它是否应根据给定的A和B值触发,然后在这些参数匹配的情况下调用执行程序。
然后,Manager类将包含三个映射,其中一个映射Guid到Subscription *并允许非常快速的取消订阅,基本上在取消订阅请求中查找GUID以获取Subscription对象,使用该对象确定哪些值为可能需要从A地图和B地图中删除A和B,然后删除该对象。订阅只需创建Subscription对象并将值添加到Guid Map,A Map和B Map。
根据(A,B)进行查找,如果A或B为空,则在另一个哈希表中查找并触发返回的订阅。如果A和B都不为空,事情变得更加棘手。
在这里,要做的事情是通过查找A并查找B.返回的集合上找到一个交集。这可以手动完成,但更快的方法可能只是有一个额外的地图,关键是B附加在A。