查找问题的优化

时间:2011-03-17 10:36:30

标签: c++ algorithm lookup

要求是许多“客户”选择他们希望控制和监听事件的一系列资源。通常会有10个左右的客户端和100个左右的资源。但是,客户端和资源的数量可能是1000多个。

目前,这是作为clientid索引的地图实现的,其值为客户端对象。客户端对象包含所选资源的列表问题是如果存在资源的事件,比如资源A,则代码必须遍历每个客户端,然后遍历客户端中的每个列表。我担心表现。

是否有更有效的算法来处理这个可能的瓶颈?

安格斯

5 个答案:

答案 0 :(得分:2)

您的结构看起来像{client:[resource]}但是为了有效地传递事件,您需要{resource:[client]}

答案 1 :(得分:1)

您似乎想要进行反向查找,因此请查看支持此功能的boost.bimap

答案 2 :(得分:1)

插入标准免责声明:过早优化是不好的,在您知道性能问题之前不要复杂化

如果只有第二个反向数据结构,资源的hashMap,包含感兴趣的客户列表呢?随着克隆和资源的变化,更多的工作,但可能是值得的。

答案 3 :(得分:1)

你有没有运行过探查器?分析器是否将其注册为真正的瓶颈?

对于现代PC来说,10个客户端和100个资源都不算什么。简单的std :: map可以非常快速地获得该查找。 像这样:

struct Resource
{
  // data 2
};
struct Client
{
  // data 2
};

std::map< Client, std::vector< Resource > > mappingClientToResources;

这只是一个想法,并且缺少一些让它工作的东西(例如客户的排序标准)

答案 4 :(得分:0)

或者您也可以将资源列表作为映射,将资源作为键,将布尔值作为值。

这样的东西
{ client1 : { resource1 : true, resource2: true, resource3:true },... }

而不是你当前的

{ client1 : [resource1,resource2,resource3],.... 

查找变得更快。

相关问题