Я работаю над кодом C ++ под GPL с интенсивной обработкой данных. Одна из частых схем, которую мы часто используем, - это собрать некоторое количество (от тысяч до миллионов) ключей или пар ключ / значение (обычно int32..int128), вставить их в hashset / hashmap и затем использовать его без дальнейших изменений.
Я назвал его неизменной хеш-таблицей, хотя хеш-таблица одиночного присваивания может быть даже лучшим именем, поскольку мы не используем его до полного построения.
Сегодня мы используем STL unordered_map / set, но мы ищем лучшая (особенно быстрая) библиотека. Можете ли вы порекомендовать что-нибудь подходящее для этой ситуации с лицензией, совместимой с GPL?
Я думаю, что наиболее эффективным подходом будет сортировка всех ключей по номеру корзины по номеру корзины и обеспечение соответствия диапазона корзины>, поэтому мы можно использовать следующий код для поиска ключа:
bool contains (set,key) {
h = hash(key);
b = h % BUCKETS;
for (i : range(set.bucket[b], set.bucket[b+1]-1)
if (set.keys[i]==key) return true;
return false;
}
Ваши комментарии по этому подходу? Можете ли вы предложить более быстрый способ реализации неизменяемой карты / набора?