gpt4 book ai didi

c++ - 是否有用于建模发布者 - 订阅者关系的容器,并且可以快速查找其中任何一个?

转载 作者:行者123 更新时间:2023-12-04 03:39:12 28 4
gpt4 key购买 nike

我有一个我想要建模的发布者-订阅者关系。发布者可以有多个订阅者,但每个订阅者只能从一个发布者那里获取数据。我认为 vector map 对此有好处:

std::map<publisher, std::vector<subscriber>>

发布者的查找、插入和删除速度很快,订阅者的插入也很快,获取发布者的所有订阅者也很容易。但是从 map 上查找和删除订户是很麻烦的。它需要迭代所有发布者,直到找到该订阅者。我仍然想要一种遍历所有订阅者的简单方法,最好不要使用双循环。

我想要一个具有这些属性的容器,其中每个操作都是一个函数调用,或者在适当的情况下循环:

  • 查找、插入、删除发布者/订阅者。 O(1) 或 O(lg N); N = 发布者/订阅者的数量
  • 发布者/订阅者的迭代。在); N = 发布者/订阅者的数量
  • 单个发布商的订阅迭代。查找 + O(N); N = 该发布商的订阅者数量。

是否有现成的容器可以做到这一点,还是我必须定制一个?

最佳答案

我建议:

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);
}
}

和类似的。

关于c++ - 是否有用于建模发布者 - 订阅者关系的容器,并且可以快速查找其中任何一个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66337091/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com