我有一个出版商-订阅者关系,我想建模。发布服务器可以有多个订阅服务器,但每个订阅服务器只能从单个发布服务器获取数据。我认为矢量地图对此是有益的:
std::map<publisher, std::vector<subscriber>>发布服务器查找、插入和删除速度快,用户插入速度快,并且很容易获得发布服务器的所有订阅服务器。但是订阅者查找和从地图中删除是很麻烦的。它需要迭代所有发布者,直到找到该订阅服务器为止。我仍然想要一种简单的方式来迭代所有订阅者,理想情况下没有双循环。
我想要一个具有这些属性的容器,其中每个操作都是一个函数调用,或者在适当的情况下循环:
是否有现成的容器可以做到这一点,或者我必须做一个自定义的容器?
发布于 2021-02-23 16:57:29
我建议:
struct SubscriptionRecords {
std::unordered_map<publisher, std::unordered_set<subscriber>>
subscribers;
std::unordered_map<subscriber, publisher>
subscriptions;
};然后是一些示例方法:
void add_subscription(publisher p, subscriber s) {
auto res = self->subscriptions.insert(s);
assert(res->second); // At most one subscription.
self->subscribers[p].insert(s);
}
void remove_subscriber(subscriber s) {
auto sp = self->subscriptions.find(s);
if (sp != self->subscriptions.end()) {
self->subscribers[*sp].erase(s);
self->subscriptions.erase(sp);
}
}和类似的。
https://stackoverflow.com/questions/66337091
复制相似问题