Если я вас правильно понимаю, вы хотите представить наборы целых чисел, которые я не считаю особенно тривиальными.
Первый пункт должен представлять набор целых чисел. Самый простой способ - использовать массив переменного размера, например так:
typedef struct {
int size;
int elems[1];
} intset;
, чем вы можете создать новый набор (с фиксированным количеством элементов) с помощью
intset *newset(int size)
{
intset *set;
set = malloc(sizeof(intset) + sizeof(int)*(size-1));
if (set) set->size = size;
return set;
}
и сохраните элементы с set->elems[0]=i1; ...
.
Другой вариант - использовать битовые массивы, но реализация будет зависеть от природы целых чисел, которые нужно хранить (например, находятся ли они в фиксированном диапазоне? Обычно они появляются в группах в наборе?).
Когда у вас есть набор целых чисел, вам понадобится функция сравнения (чтобы определить, имеют ли два набора одинаковые элементы). Если вы выбрали массив для представления набора и сохраняете его отсортированным, довольно просто проверить, идентичны ли два набора; если это растровое изображение, оно будет зависеть от того, как вы его реализовали.
Теперь для набора наборов вы можете выбрать (отсортированный) вектор, размер которого вам может понадобиться время от времени при вставке элементов или хеш-таблицы. В последнем случае вам нужно написать хеш-функцию для ваших наборов целых чисел (возможно, с использованием существующих функций!).
Как я уже сказал, мне кажется, это не тривиально, я не удивлен, что Google не помог.
Это не очень сложно, хотя вам просто нужно принять некоторые решения, прежде чем продолжить.