39 void build(
const std::vector<GVector>& g_vectors) {
40 index_by_key_.clear();
41 index_by_key_.reserve(g_vectors.size());
44 for (
const GVector& g_vector : g_vectors) {
45 offset_ = std::max({offset_,
46 std::abs(g_vector.miller.x) + 1,
47 std::abs(g_vector.miller.y) + 1,
48 std::abs(g_vector.miller.z) + 1});
51 for (
int g_vector_index = 0; g_vector_index < static_cast<int>(g_vectors.size());
54 index_by_key_[pack(miller.
x, miller.
y, miller.
z)] = g_vector_index;
69 [[nodiscard]]
int find(
int miller_h,
int miller_k,
int miller_l)
const {
70 if (std::abs(miller_h) >= offset_ || std::abs(miller_k) >= offset_ ||
71 std::abs(miller_l) >= offset_) {
74 auto iterator = index_by_key_.find(pack(miller_h, miller_k, miller_l));
75 return iterator == index_by_key_.end() ? -1 : iterator->second;