2010-02-07 44 views
4

我必须搜索一个进程表,它由在给定的一组IP地址上运行的进程的名称填充。 目前我在C++中使用多进程映射,进程名称作为键值和IP地址。 有没有其他有效的数据结构可以完成相同的任务。 也可以通过使用pthreads获得任何类型的并行性?如果有的话,任何人都可以将我指向正确的方向什么类型的数据结构可以有效地搜索进程表

回答

1

您不需要并行访问数千个条目的RAM中的数据结构。你可以锁定它(确保当时只有一个进程/线程访问它),并确保访问足够了。 Multimap没问题。哈希映射虽然会更好。

1

什么是您的表的典型查询?

尝试使用散列表,它可以更快的大表。

如何存储名称和IP? UTF,字符串,char *?叶作为uint32或字符串?

对于具有大量读取查询的只读结构,您可以从多个线程中受益。

UPD:使用std::unordered_multimap#include <tr1/unordered_map>

+0

名字存储为字符串 – gunjit 2010-02-07 04:50:14

+0

和典型查询发现是某个进程正在运行或不..如果运行报告IP地址 – gunjit 2010-02-07 04:50:51

+0

使用EXT /的hash_map文件和类__gnu_cxx :: hash_multimap在GCC 4.1和更早 – osgx 2010-02-07 05:11:04

0

根据表的大小,你会发现一个哈希表比multimap容器(与二叉树实现)更有效。

hash_multimap数据结构实现了散列表STL容器,并且可能对您有用。

+0

是散列表可用在GNU编译器或Linux下? – gunjit 2010-02-07 04:58:49

+0

它的C++ stdlib,这意味着它可以在标准C++库所在的地方使用。这实际上意味着所有符合C++标准的编译器。 – batbrat 2010-02-07 05:17:03

+0

散列图不是C++的标准(在1998和2003版本中)。它们将被包含在下一个C++标准C++ 0x中。 GCC在它的libstdC++类名unordered_multimap中有一个pre-standard tr1的实现。还有非标准的ext变量:'hash_multimap' – osgx 2010-02-07 05:32:02

相关问题