<分区>
在 C++ 中,map
用于指向相对于键的值。
如何使用 C++ STL 概念在 C 编程语言中实现相同的功能
标签 c dictionary stl
<分区>
在 C++ 中,map
用于指向相对于键的值。
如何使用 C++ STL 概念在 C 编程语言中实现相同的功能
最佳答案
您真正需要做的就是定义一个至少包含键和值成员的结构
,然后定义一个可以容纳多个该结构的容器。容器只需要支持三种基本操作:Insert、Remove 和 Find。
几乎所有类型的 data structure会做,但在易于实现和效率之间进行不同的权衡。一些最可能的选择是:
数组或链表:如果您知道永远不会有大量数据并且效率不是真正的问题,那么您可以简单一些。查找操作可以只是一个简单的线性搜索。
排序数组:您还可以选择在每次插入或删除条目时保持简单数组排序。这让 Find 算法可以使用二进制搜索,如果 Find 比 Insert 或 Remove 更频繁地需要,这可能是合适的。
A red-black tree :如果你想要C++的std::map
为大数据集提供的O(log N) Insert/Remove/Find效率性能,红黑树是一个不错的选择。这也保证了元素按键排序,如果您需要处理数据的子范围,这很有用。
A hash table :C++11引入了std::unordered_map
,如果你能为你的键类型找到或产生一个哈希函数,你可以通过实现一个哈希表在C中模仿它。此数据结构具有 O(1) 平均情况插入/删除/查找,但 O(N) 最坏情况插入/删除/查找。条目未排序。
实现红黑树或哈希表可能有点棘手,但您可以找到并使用许多免费的实现。
关于c - 如何在不使用 C++ STL 的情况下实现 C 中的 map 概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50927929/