Решает ли ваша проблема ваша проблема?
fig, ax = plt.subplots()
ax2 = ax.twinx()
ax.bar(df_eg.index, df_eg["Release"], color=(190/255,190/255,190/255,0.7), label='Release')
ax2.plot(df_eg.index, df_eg["Hold"], color='green', label='Hold')
ax.set_xticklabels(df_eg.index)
ax.legend(loc='best')
Много реализаций C поддерживают tsearch (3) или hsearch (3). tsearch (3) является двоичным деревом, и можно обеспечить обратный вызов компаратора. Я думаю, что это почти настолько близко, как Вы собираетесь добраться до станд.:: карта.
Вот некоторый 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;
}
Это - конечно, одна возможная реализация. Вы могли бы хотеть рассмотреть, как Вы реализуете индексацию и какое влияние производительности, которое будет иметь. Например, у Вас мог быть список intKey быть отсортированным списком ключей. Поиск ключа был бы O (зарегистрируйте N), время, но вставка нового объекта была бы O (N).
Вы могли реализовать его как дерево (как станд.:: карта), и затем у Вас был бы O (зарегистрируйте N), вставка и поиск.
Другая альтернатива должна была бы реализовать его как хэш-таблицу, которая будет иметь лучшую производительность во время выполнения, принимая хорошую хеш-функцию и достаточно редкий массив intKey.
Можно реализовать его однако, Вы выбираете. При использовании подхода связанного списка вставка будет O (1), но извлечение и удаление будут O (n). При использовании чего-то более сложного как красно-черное дерево, у Вас будет намного лучшая средняя производительность.
при реализации его сами, связанный список является, вероятно, самым легким, иначе захватывание некоторых соответственно лицензировало красно-черный или другой тип дерева из Интернета, будет наилучший вариант. Реализация Вашего собственного красно-черного дерева не рекомендуется... Я сделал это и предпочел бы не делать это снова.
И отвечать на вопрос Вы не спросили: возможно, необходимо вновь исследовать, предоставляет ли портирование на C от C++ действительно все преимущества, которые Вы хотели. Конечно, существуют ситуации, где это могло быть необходимо, но нет многих.
Нет никакой стандартной библиотеки в C, который обеспечивает функциональность, аналогичную карте. Необходимо будет реализовать собственную подобную карте функциональность с помощью некоторой формы контейнера, который поддерживает элементы доступа через ключи.
человек dbopen
Обеспечивает ПУСТОЙ УКАЗАТЕЛЬ как аргумент файла, и это будет в оперативной памяти только контейнер для данных ключа/значения.
существуют также различные интерфейсы библиотеки базы данных Беркли с подобной функциональностью ключа/значения (человек dbm, выезд BerkeleyDB от Sleepycat, попробуйте некоторые поиски, и т.д.).