【问题标题】:Where can i find the C++ stl map implementation in C? [closed]我在哪里可以找到 C 中的 C++ stl map 实现? [关闭]
【发布时间】:2016-02-18 19:34:38
【问题描述】:

在哪里可以找到 C 语言中的 C++ STL 映射实现?C++ STL 中使用的红黑树代码在 C 语言中可用吗?

【问题讨论】:

  • “我在哪里可以找到苹果树的橙子。”你已经被告知它们是不同的语言。请自行研究如何自己实现该算法。

标签: c dictionary stl


【解决方案1】:

用于实现 STL 容器的代码因编译器而异,但对于所有编译器而言,它在很大程度上依赖于 C++ 特性(特别是具有复杂继承以实现隐藏的模板和类等)。它通常是完全不可读的;试图将其用作 C 代码的基础只会以泪水告终。

如果您想要红黑树代码,我是否建议您寻找已经用 C 编写的实现,例如this MIT alum's code.

【讨论】:

  • 你可以将它专门用于 std::map<void *,void *> 并导出到 C :)
  • @Slava:除了map是有序的,并且模板化了比较函数; void* 的值是合理的,但使用 void* 作为键不太可能支持您感兴趣的任意排序。(为其他人解释,我假设您在开玩笑)用 C 风格进行概括字符串键会涵盖很多情况,所以std::map<const char*, void*> 可能不会完全没用。
  • 比较函数也可以通过c中的函数指针来提供。谁知道开玩笑...
  • @Slava 你能详细说明一下吗:“你可以将它专门用于 std::map 并导出到 C 吗?
  • @Dr.John 我认为这很明显,您在其中创建带有 std::map<void*,void*,...> 的结构和一组接受指向该结构和转发逻辑的 export "C" 函数 - 搜索/插入/删除等等。它可能应该有一个指向比较器函数bool compare( const void *, const void * ) 的指针。或者,如果您只需要特定类型,那么它会更简单。不过我不确定这是否实用。