如何更有效地存储和搜索c中的ipv4 ip地址

时间:2011-03-28 17:22:24

标签: c linux

我有一个要求,c中的高效数据结构应该将ipv4地址作为输入并存储,根据需要搜索存储的数据结构。 我们可以将ipaddress转换为字符串并将其存储在数据结构中并检查其存在吗?如果是这样我们怎样才能实现这一点! 能否请你给我宝贵的意见继续。

提前感谢。

4 个答案:

答案 0 :(得分:2)

不是将其转换为字符串而是将其存储为32位整数。将新的插入到链接列表或数组或其他数据结构中的正确位置,一切都很好。如果对列表进行排序,则查找项目非常简单,因为您可以使用二进制搜索来查找项目(或找到插入点)。

我个人在很多情况下都会使用数组。这意味着插入更复杂(因为你需要将插入点上方的成员复制到1,但它相对较快(直到你开始讨论数千个条目)。

如果您确实需要能够处理数千个地址,那么地图结构可能更适合您。

答案 1 :(得分:1)

IP地址是4个八位字节。八位字节是8位,这是一个字节,所以你可以存储4个字节的ip地址或32位机器上的int,如果你使用的任何实现有32位int。

答案 2 :(得分:1)

您可以实现一个集合并使用它。

您还可以创建一种树,其中每个节点包含一个八位字节,并且最多有256个子节点(这是下一个八位字节)。根将只有指向第一组八位字节的指针。

另一种选择是将它们作为无符号整数存储在BST或类似的东西中。

答案 3 :(得分:0)

如果您需要存储和搜索大量IP地址,可能需要使用radix tree

我认为Linux内核使用自己的基数树数据结构变体来处理其IP相关代码,例如路由表。你可能想看看它的想法。

如果您的地址很少或只是想要简单的东西,请使用哈希集。

如果这是一个真正的应用程序,如果你想要前瞻性,你也应该包括对IPv6地址的支持。随着时间的推移,每年有更多的计算机系统将使用IPv6寻址和IPv4 NAT地址作为备份。