从C++下去到 C: std::map 的替代品?
我正在寻找 std::map
寻找可以降低关键搜索成本的解决方案。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
我正在寻找 std::map
寻找可以降低关键搜索成本的解决方案。
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(7)
已经为你做好了。
请参阅 RtlXxxGenericTable 和 RtlXxxGenericTableAvl 调用。
RtlNumberGenericTableElements
RtlInitializeElementGenericTableAvl
Already done for you.
See the RtlXxxGenericTable and RtlXxxGenericTableAvl calls.
RtlNumberGenericTableElements
RtlInitializeElementGenericTableAvl
如果键的数量非常很小,例如10个左右,也许您可以只进行线性搜索。如果您注意将键空间压缩在内存中以最大限度地提高缓存命中率,那么它会非常快,并且在内存分配等方面的开销非常低。
If the number of keys is very small, e.g. 10 or something, perhaps you can get away with just a linear search. If you take care to keep the key-space compressed in memory to maximise cache hits, it can be pretty fast and have very low overhead in terms of memory allocations and so on.
过去,对于少于几千个对象的映射,我发现创建一个按键值排序的 std::vector,然后使用二分搜索进行搜索比使用 std::map 快得多。
In the past, for maps with less than a few thousand objects, I've found that creating a std::vector sorted on the key value that is then searched for using a binary search is significantly faster than using a std::map.
您也可以用 C 实现
std::map
语义。只是它不会是模板
。这是开始:
You could implement
std::map
semantics in C as well. Only that it will not betemplate
.Here is the start:
我相信STL地图实现是一棵红黑树
http://en.wikipedia.org/ wiki/Map_%28C%2B%2B%29
http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree
STL map implementation is a red-black tree I believe
http://en.wikipedia.org/wiki/Map_%28C%2B%2B%29
http://en.wikipedia.org/wiki/Self-balancing_binary_search_tree
在 C 中,您需要两个伴随数组:一个用于键,另一个用于值。如果您可以封装这两者,以便用户可以坚持使用地图语义,那将会有所帮助。
You'll need two companion arrays in C: one for keys, the other for values. It'd help if you could encapsulate the two so users could stick to map semantics.
如果您需要用 C 语言实现字典的简单实现,那么有一天用 C 语言实现字典会更有趣……但我们并不总是有时间这样做。
所以你可以尝试看看 iniparser module one,它是一个可在内核中使用的小字典和/或嵌入式世界。
If you need a simple implementation of a dictionary in C, it's funnier to implement a dictionary in C one day... but we don't have always time to do it.
So you could try to have a look to iniparser module one, it is a little dictionary usable in a kernel and/or embedded world.