Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 查找问题的优化_C++_Algorithm_Lookup - Fatal编程技术网

C++ 查找问题的优化

C++ 查找问题的优化,c++,algorithm,lookup,C++,Algorithm,Lookup,要求是许多“客户机”选择一系列他们希望控制和侦听事件的资源。通常会有10个左右的客户端和100个左右的资源。然而,客户机和资源的数量可能会超过1000个 这当前实现为一个由clientid索引的映射,其值为客户机对象。客户机对象包含所选资源的列表。问题是,如果资源(如资源a)发生事件,则代码必须循环遍历每个客户机,然后遍历客户机内的每个列表。我关心表现 有没有更有效的算法来处理这个可能的瓶颈 Angus您似乎想进行反向查找,因此请查看支持此功能的。插入标准免责声明:过早优化是不好的,在您知道存在

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

这当前实现为一个由clientid索引的映射,其值为客户机对象。客户机对象包含所选资源的列表。问题是,如果资源(如资源a)发生事件,则代码必须循环遍历每个客户机,然后遍历客户机内的每个列表。我关心表现

有没有更有效的算法来处理这个可能的瓶颈


Angus

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

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


让第二个反向数据结构,一个资源的hashMap,包含感兴趣的客户列表,怎么样?随着客户机和资源的变化,您需要做更多的工作,但这可能是值得的。

您的结构看起来像
{client:[resource]}
但是为了高效地传递事件,您需要
{resource:[client]}
您运行了探查器吗?探查器是否将其注册为真正的瓶颈

10个客户端和100个资源对于一台现代PC来说根本不算什么。简单的std::map可以非常快地完成查找。 大概是这样的:

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

std::map< Client, std::vector< Resource > > mappingClientToResources;
struct资源
{
//数据2
};
结构客户端
{
//数据2
};
std::map>映射clienttoresources;

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

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

差不多

{ client1 : { resource1 : true, resource2: true, resource3:true },... }
而不是你现在的

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

查找变得更快。

客户端资源链接多久更改一次,应用程序使用的内存量是否受到限制?绝对正确。如果您有性能问题,请始终首先配置文件。然后考虑解决方案。