我正在将一些c++代码移植到c。什么是c中std::map的可行替代品?
我知道c中没有等效项。
这就是我正在考虑使用的:
在C++中:
std::map< uint, sTexture > m_Textures;
在c中:
typedef struct
{
uint* intKey;
sTexture* textureValue;
} sTMTextureMap;
那可行还是我简化 map 太多了?以防万一您没有获得其纹理贴图的目的。
最佳答案
许多C实现都支持tsearch(3)或hsearch(3)。 tsearch(3)是一个二叉树,您可以提供一个比较器回调。我认为这与您将要获得std::map的距离差不多。
这是一些c99示例代码
#include <search.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
typedef struct
{
int key;
char* value;
} intStrMap;
int compar(const void *l, const void *r)
{
const intStrMap *lm = l;
const intStrMap *lr = r;
return lm->key - lr->key;
}
int main(int argc, char **argv)
{
void *root = 0;
intStrMap *a = malloc(sizeof(intStrMap));
a->key = 2;
a->value = strdup("two");
tsearch(a, &root, compar); /* insert */
intStrMap *find_a = malloc(sizeof(intStrMap));
find_a->key = 2;
void *r = tfind(find_a, &root, compar); /* read */
printf("%s", (*(intStrMap**)r)->value);
return 0;
}