There is no such thing as an associative array in the C programming language; there are only simple arrays and pointers to them with which a programmer can do things like static char *names[] = { "John", "Suzanne", NULL }; and then search for an entry by iterating over the (null-terminated) array and accessing one of its elements with printf("%s\\n", names[0]);

After using Perl and PHP for a while one gets used to associative arrays. In Perl, something like $surnames{'John'} = 'Doe'; allow the programmer to later print $surnames{'John'}; to retrieve the string “Doe”.

The use of such maps (also called dictionnaries or hash tables) is desirable in C also. Apart from hsearch, which suffer from a number of limitations, there are no functions to implement maps in the standard C library.

One very interesting and free library for implementing maps, is the set of routines published as Mapkit by Jean-Sebastien Roy. I’ve used mapkit a number of times now and greatly enjoy it. Documentation is a bit lacking, but the garden variety hacker will get the hang of it soon. I’ve created a small wrapper around the map functions (for strings anyway) which you are welcome to have for the asking. It allows me to do this:

MAP *surnames = map_new();

map_stash(surnames, "John", "Doe", 0);
map_stash(surnames, "Suzanne", "Delicious", 0);
printf("%s\\n", map_find(surnames, "Suzanne"));

Very practical.