【发布时间】:2016-02-18 19:34:38
【问题描述】:
在哪里可以找到 C 语言中的 C++ STL 映射实现?C++ STL 中使用的红黑树代码在 C 语言中可用吗?
【问题讨论】:
-
“我在哪里可以找到苹果树的橙子。”你已经被告知它们是不同的语言。请自行研究如何自己实现该算法。
标签: c dictionary stl
在哪里可以找到 C 语言中的 C++ STL 映射实现?C++ STL 中使用的红黑树代码在 C 语言中可用吗?
【问题讨论】:
标签: c dictionary stl
用于实现 STL 容器的代码因编译器而异,但对于所有编译器而言,它在很大程度上依赖于 C++ 特性(特别是具有复杂继承以实现隐藏的模板和类等)。它通常是完全不可读的;试图将其用作 C 代码的基础只会以泪水告终。
如果您想要红黑树代码,我是否建议您寻找已经用 C 编写的实现,例如this MIT alum's code.
【讨论】:
std::map<void *,void *> 并导出到 C :)
map是有序的,并且模板化了比较函数; void* 的值是合理的,但使用 void* 作为键不太可能支持您感兴趣的任意排序。(为其他人解释,我假设您在开玩笑)用 C 风格进行概括字符串键会涵盖很多情况,所以std::map<const char*, void*> 可能不会完全没用。
std::map<void*,void*,...> 的结构和一组接受指向该结构和转发逻辑的 export "C" 函数 - 搜索/插入/删除等等。它可能应该有一个指向比较器函数bool compare( const void *, const void * ) 的指针。或者,如果您只需要特定类型,那么它会更简单。不过我不确定这是否实用。