Это называется "ассоциативный массив", SQL и Oracle для этого не нужны. Простейший ассоциативный массив делается из хеш-таблицы с прямой адресацией и пишется такой код за полчаса. если с одинаковым префиксом, то сложнее, это уже префиксное дерево. Вместо которого можно придумать rolling hash и алгоритм Рабина Карпа. Однако, чтоб не утонуть в сложности, может быть проще сделать метод перечисления отсортированного списка ключей, из которого отобрать совпадающие с префиксом вручную. Kлючи вставляются в обычный массив который сортируется по ключам потом. При выборке из этого массива находится итератор указывающий на нижнюю границу (lower bound) для заданного префикса (это делается бинарным поиском) и все последующие ключи вручную, до первого несовпадения, проверяются на совпадение префикса. Вместе с ключём в массиве хранится сразу ссылка на значение... В таком методе вставка/удаление дороговаты (пересортировка массива). Зато реализуется двумя функциями: qsort (из C-библиотеки) и lower_bound (есть в std::map, нет в C, легко написать самому, содрать с bsearch(3) лишь чуть подправив).