检索信息c ++的最快数据结构

时间:2011-03-16 10:42:51

标签: c++ data-structures

我正在开发客户端应用程序,它是TCP客户端的模拟器,可能需要模拟1000个客户端。

每个客户端状态信息的大小可以是50字节。服务器需要状态信息,客户端模拟器需要存储一些位置。

服务器可以向任何客户端请求状态信息。因此,我想知道哪种数据结构有用。

服务器已经实现。如何管理这些客户端状态信息。由于我不能使用boost和其他第三方库,我只能依赖c ++。

关于如何管理状态信息:

  • 模拟客户知道自己的状态
  • 模拟服务器可以从模拟客户端请求状态。
  • 每个客户都有固定的独特数字。服务器知道这个号码。当客户端连接时,服务器将使用此编号映射套接字以识别客户端。
  • 每次服务器轮询任何客户端的状态时,它都会轮询所有客户端状态。

在此方案中可以使用哪种STL /或其他数据结构。 这里没有第三方的自由党。

请建议我使用哪一个

由于

3 个答案:

答案 0 :(得分:3)

这取决于你需要做什么。

如果它只是一个简单的查找,那么使用stl :: map(在STL中,这通常实现为树,因此你有O(lg N)查找)。

如果只有1000并且您可以控制标识符,为什么不使用数组呢?这显然会给你O(1)访问给定密钥的任何元素。如果预先知道了一组标识符,请使用Perfect Hashing,您也可以进行O(1)查找。

老实说,如果你只有1000个元素,那么如果它不是代码的时间关键部分,几乎所有东西都会非常快速地运行。

答案 1 :(得分:1)

通常,最快是O(1),这是恒定时间查找。如何实现这一点以及是否可能受到特定环境的限制。

到目前为止,你的解释还不清楚你有什么限制(服务器有),我们也不知道它有什么信息或它是如何运作的。

打开问题:

  • 谁知道状态?
  • 谁知道客户端和服务器的状态?
  • 在想知道客户的状态之前,服务器“有权访问”了什么?
  • 服务器每次都需要所有客户端状态吗?

服务器想知道客户端状态的几个例子:

服务器具有指向客户端对象的指针,状态在客户端上。

int status = client->getStatus();

服务器具有客户端ID,状态存储在数组中。客户ID为0-999。

int status = clientStatus[clientId];

以上两者都是O(1)。

如果你更好地描述事情,你会得到更好的答案。

答案 2 :(得分:0)

我建议使用类型<key, value>的用户定义对象的向量,使用哈希函数进行O(1)访问。

相关问题