【问题标题】:Data structure for topic list of clients客户主题列表的数据结构
【发布时间】:2011-08-29 06:53:09
【问题描述】:

我需要一个数据结构,对客户端列表订阅的主题进行 O(1) 的添加、查找和删除操作。

它需要支持的一些功能是:isTopicExists、isClientExists、getClientsForTopic、addClientForTopic、removeClientForTopic 和 getTopicsForClient。

给定一个主题名称、一个我们可以假设是唯一的客户端 ID 和客户端指针,最好使用什么数据结构?有哪些可用的实现?

【问题讨论】:

  • 我正在使用 boost uuid 来生成唯一的客户端 ID,并且可以使用 boost::hash 函数。主题名称也是 WideString。
  • 我不太明白你的问题。也许你应该给出每个所需函数的参数和预期输出(如果有的话)和复杂性。

标签: c++ data-structures hashmap


【解决方案1】:

哈希映射似乎不是一个坏主意。它的预期复杂度为 O(1),但根据链接的实现方式,具有许多冲突的悲观场景可能会使您达到 O(n)。对数搜索在这里很难被击败,所以我会选择自平衡二叉搜索树,甚至是 std::map(大多数 STL 实现中的红黑树)。使其更有效的唯一方法是使用向量(数组),但前提是您的 ID 很小或偏移但彼此靠近。你不能在这里打败数学。

【讨论】:

  • 如果你在代码中使用 std::map 之类的东西作为 typedef(并实际使用该 typedef),尝试不同的结构可能会相对轻松。
猜你喜欢
  • 1970-01-01
  • 2010-11-11
  • 2017-07-24
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 2013-06-16
  • 1970-01-01
  • 2018-04-14
相关资源
最近更新 更多