在C ++ map
中,用于指向键值。
如何使用C ++ STL概念在C编程语言中实现相同的功能
答案 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树),或者使用任何提供字典的库。