fork download
  1. #include <stdlib.h>
  2. #include <stdio.h>
  3.  
  4. typedef struct Cheapmap Cheapmap;
  5.  
  6. struct Cheapmap {
  7. unsigned count;
  8. void *table[256];
  9. };
  10.  
  11. void insert(Cheapmap *chm, void *p)
  12. {
  13. unsigned char *u = p;
  14.  
  15. if (chm->table[*u] == NULL) {
  16. chm->table[*u] = p;
  17. chm->count++;
  18. }
  19. }
  20.  
  21. void **keys(Cheapmap *chm)
  22. {
  23. void **k = calloc(chm->count + 1, sizeof(*k));
  24. void **p = k;
  25.  
  26. unsigned i;
  27.  
  28. for (i = 0; i < 256; i++) {
  29. if (chm->table[i]) *p++ = chm->table[i];
  30. }
  31.  
  32. return k;
  33. }
  34.  
  35.  
  36. int main()
  37. {
  38. Cheapmap chm = {0};
  39.  
  40. insert(&chm, "banana");
  41. insert(&chm, "strawberry");
  42. insert(&chm, "apple");
  43. insert(&chm, "papaya");
  44.  
  45. void **k = keys(&chm);
  46. unsigned i = 0;
  47.  
  48. while (k[i]) {
  49. puts(k[i]);
  50. i++;
  51. }
  52.  
  53. free(k);
  54.  
  55. return 0;
  56. }
  57.  
Success #stdin #stdout 0s 4444KB
stdin
Standard input is empty
stdout
apple
banana
papaya
strawberry