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

时间:2018-06-19 12:01:13

标签: c dictionary stl

在C ++ map中,用于指向键值。

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

3 个答案:

答案 0 :(得分:5)

您真正需要做的就是定义一个struct,它至少包含您的键和值的成员,然后定义一个可以容纳多个该结构的容器。容器只需要支持三个基本操作:插入,删除和查找。

几乎所有类型的data structure都可以使用,但是在易于实现和效率之间进行了权衡。一些最可能的选择是:

  • 数组或链表:如果您知道永远不会有大量数据并且效率并不是真正的问题,则可以简单地进行操作。查找操作可以只是简单的线性搜索。

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

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

  • 一个hash table :C ++ 11引入了std::unordered_map,如果您可以为您的键类型找到或产生一个哈希函数,则可以模仿它在C中通过实现哈希表来实现。该数据结构具有O(1)个平均情况的插入/删除/查找,但O(N)个最坏情况的插入/删除/查找。条目未排序。

实现红黑树或哈希表可能有些棘手,但是您可以找到并使用许多免费的实现。

答案 1 :(得分:1)

标准C库中没有这样的数据结构。您需要自己实施。

答案 2 :(得分:1)

您必须自己实现一个字典(在std::map的情况下通常是RB树),或者使用任何提供字典的库。