Я хочу написать программу для загрузки хранилища значений ключей со множеством случайных данных случайных типов. Предполагая, что хранилище значений ключей поддерживает три типа (строки, списки и наборы), существуют операции, которые допустимы для набора (скажем, объединение), которые недопустимы для строк.
#define SUBSTR 0 // substring, only on strings
#define SEARCH 1 // search, only on strings
#define PUSH 3 // only on lists
#define ADD 4 // only on sets
#define UNION 5 // only on sets
Я заполняю таблицу случайными операциями, но хочу убедиться, что эти операции выполняются для ключа правильного типа. Например, гарантируя, что операции объединения всегда выполняются на ключах типа set.
int optab[100];
optab[0] = ADD
optab[1] = SUBSTR
.
.
.
optab[99] = UNION
Для каждой выполняемой операции я мог бы записать тип каждого ключа локально в тот момент, когда ключ был впервые создан в моей программе, или продолжать обходить пространство ключей, пока не найду ключ правильного типа. Но я тоже не хочу этого делать.
При первом параметре размер структуры, используемой для поддержки деталей, увеличивается по мере добавления новых ключей (и типов). А со вторым вариантом время, необходимое для поиска правильного ключа для типа, увеличивается по мере добавления ключей (и типов).
Существует ли умный способ правильного сопоставления типов и операций, не зависящий от размера пространства ключей или количества поддерживаемых типов?
Я надеюсь, что с учетом операции я смогу сгенерировать случайное имя ключа (например, key90876) с 90876
, являющимся случайной частью, которая была бы правильного типа.