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

07-24 19:39