我需要将一些 C++ 代码转换为 C,但我在 STL 容器方面遇到了一些问题。在原始 C++ 代码中,set 容器被用作set< pair<int, int>, sortMapped> mySet;
其中 sortMapped 是一个自定义比较器,以通过映射值而不是键值“排序”条目。当然,基本的插入、删除和迭代器也包含在原始 C++ 代码中。
所以我的问题是,有没有人知道这种“始终排序”容器的 C 等价物,我也可以在其中编写自己的比较器?谢谢你。
我需要将一些 C++ 代码转换为 C,但我在 STL 容器方面遇到了一些问题。在原始 C++ 代码中,set 容器被用作set< pair<int, int>, sortMapped> mySet;
其中 sortMapped 是一个自定义比较器,以通过映射值而不是键值“排序”条目。当然,基本的插入、删除和迭代器也包含在原始 C++ 代码中。
所以我的问题是,有没有人知道这种“始终排序”容器的 C 等价物,我也可以在其中编写自己的比较器?谢谢你。
There is no such container within the C language. C does not have nice things like STL and so I think you will just have to write it yourself.
你有几个选择
...而且我可能错过了其他一些数据结构——但这取决于相关数据的性质和用途。
编辑
你总是可以谷歌我上面提到的数据结构来获取代码示例。
有谁知道这种“始终排序”容器的 C 等价物,我也可以在其中编写自己的比较器?
最简单的,它是一个数组,qsort()
每次更改后使用排序。qsort()
您可以编写自己的比较器。
使用bsearch()
,您可以为其添加功能std::set
。
从排序后的数组中查找项目真的很便宜。但是插入是相当昂贵的操作。因此,这不是所有时间关键型应用程序的解决方案。