如何在不使用C++ STL的情况下在C中实现映射概念

Ram*_*r P 0 c dictionary stl

在C++中map用于指向关键字的值.

如何在使用C++ STL概念的情况下在C编程语言中实现相同的功能

asc*_*ler 5

您真正需要做的就是定义一个struct至少包含键和值的成员,然后定义一个可以容纳多个该结构的容器.容器只需要支持三种基本操作:Insert,Remove和Find.

几乎任何类型的数据结构都可以,但在简单的实现和效率之间有不同的权衡.一些最可能的选择是:

  • 数组或链表:如果您知道永远不会有大量数据,效率并不是真正的问题,那么您可以简单一点.Find操作可以只是一个简单的线性搜索.

  • 已排序的数组:您还可以选择在每次插入或删除条目时保持一个简单的数组.这使得Find算法可以使用二进制搜索,如果需要Find比插入或删除更频繁,则可能更合适.

  • 一个红黑树:如果你想为O(log N)插入/删除/查找提供高效的性能C++的std::map大型数据集,红黑树是一个不错的选择.这也保证了元素按键排序,如果您需要处理数据的子范围,这很有用.

  • 一个哈希表:C++ 11引进std::unordered_map的,如果你能找到或产生的哈希函数.您的密钥类型,你可以通过实现一个哈希表模仿在C.此数据结构具有O(1)平均情况插入/删除/查找,但O(N)最坏情况插入/删除/查找.条目未排序.

实现红黑树或哈希表可能有点棘手,但是有许多可用的免费实现可供您查找和使用.