#include #define HM_IMPLEMENTATION #define HM_INITIAL_CAPACITY 1 #include "hm.h" void print_hm(const HashMap *hm) { HashMapIterator it = hm_iterate(hm); while (hm_next(&it) != NULL) { printf("%-15s: ", (const char*)hm_key(&it)); printf("%d\n", *(int*)hm_value(&it)); } } const char *words[49] = { "apple", "banana", "cherry", "date", "elderberry", "fig", "grape", "honeydew", "apple", "banana", "kiwi", "lemon", "mango", "nectarine", "orange", "papaya", "quince", "raspberry", "strawberry", "tangerine", "ugli", "voavanga", "watermelon", "xigua", "yellowfruit", "zucchini", "apple", "banana", "cherry", "mango", "kiwi", "lemon", "lemon", "orange", "papaya", "papaya", "grape", "grape", "grape", "strawberry", "strawberry", "date", "date", "date", "fig", "fig", "elderberry", "nectarine", "plum" }; const size_t N = sizeof(words)/sizeof(words[0]); const int ONE = 1; int main(void) { HashMap freq = hm_create(0, sizeof(int)); for (size_t i = 0; i < N; ++i) { const char *word = words[i]; int *f = hm_get(&freq, word); if (f == NULL) { hm_put(&freq, word, &ONE); } else { *f += 1; } } print_hm(&freq); printf("count = %zu\n", freq.count); HashMapIterator it = hm_iterate(&freq); hm_next(&it); while (hm_value(&it) != NULL) { const void *key = hm_key(&it); hm_next(&it); hm_remove(&freq, key); } printf("count = %zu\n", freq.count); hm_free(&freq); return 0; }