gpt4 book ai didi

c++ - 将 std::map 移植到 C?

转载 作者:IT老高 更新时间:2023-10-28 21:49:21 24 4
gpt4 key购买 nike

我正在将一些 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;
}

关于c++ - 将 std::map 移植到 C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/647054/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com