У меня есть поток трехмерных целочисленных координат, которые соответствуют вокселям и, таким образом, выровнены по сетке. Я хочу выяснить, существует ли текущий обработанный триплет для фильтрации дубликатов. Мне удалось построить простое решение моей проблемы с std::set
. Пусть x
y
z
будет 3 int
, а registry
будет std::set< std::array<int, 3> >
. Я сделал функцию, которая возвращает bool
вот так
std::array<int, 3> key = {x, y, z};
return registry.insert(key).second;
Но это далеко не оптимизировать с точки зрения времени вычислений. Читая документацию и темы SO, я понимаю, что unordered_set
должно быть более подходящим. На самом деле здесь не нужно ничего сортировать. Кроме того, я предполагаю, что использование array<int,3>
в качестве ключа неэффективно для сравнения во время insert
.
Для unordered_set
требуется хеш-функция. Изучая хеш-функции, которые я нашел boost::hash_combine
, а также другие варианты.
Как эффективно использовать unordered_set
в моей ситуации? Ключевым моментом является как можно быстрее. Мне не нужен доступ к значениям, и мне не нужно делать каких-либо специальных вычислений.