структура данных словарь / карта / пары ключ-значение в C - PullRequest
2 голосов
/ 29 декабря 2010

Как создать и получить доступ к набору пар ключ-значение в C?Чтобы использовать глупый простой пример, скажем, я хочу создать таблицу, которая переводит между целым числом и его квадратным корнем.

Если бы я писал JavaScript, я мог бы просто сделать это:

var squareRoots = {
   4: 2,
   9: 3,
   16: 4,
   25: 5
}

и затем получить к ним доступ как:

var squareRootOf25 = squareRoots[5]

Как мне сделать это в C?Что если я хочу использовать один тип перечисления в качестве ключа и другой тип перечисления в качестве значения?

Ответы [ 4 ]

3 голосов
/ 29 декабря 2010

Вы можете рассмотреть реализацию хеша на языке Си для достижения этой цели.Для ознакомления с основами хеширования обратитесь к Wikipedia .Обратитесь к этому вопросу для получения дополнительной информации и ссылок.

Эта ссылка дает хороший обзор и подробности реализации.

3 голосов
/ 29 декабря 2010

Нет встроенного способа сделать это, если не считать инициализацию массива, подобного этой, в C99:

double squareRoots[] =
{
     [4] = 2.0,
     [9] = 3.0,
    [16] = 4.0,
    [25] = 5.0,
};

Однако, это выделяет 26 элементов в массиве;все остальные значения равны нулю.

Предполагая, что вы не имели в виду это, посмотрите на Интерфейсы и реализации C Д. Р. Хансона;он показывает способ реализации ассоциативных массивов (хешей или словарей).

1 голос
/ 01 января 2011

Вы также можете использовать libghthash для хэшей общего назначения.Они довольно просты в использовании и включают в ваше приложение.Тем не менее, это сторонний API - так что если это проблема, вам придется реализовать свои собственные.

В C. нет встроенного связанного массива / хэш-таблиц.(C99), вероятно, лучший путь, если у вас нет нецифровых клавиш:

T hash[] = {
    [1] = tObj,
    [255] = tObj2,
};
0 голосов
/ 12 апреля 2011

Вы можете использовать map , реализованную как часть clib library

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...