与6维数组的索引相比,如何更好地表示6个整数键?

问题描述 投票:0回答:1

在我的程序中,状态可以由六个整数唯一标识。每个整数i都满足0 <= i <= 10,并且每个状态都有一个关联的值。我目前正在使用6维数组来跟踪每个状态值。我将状态值存储在像state[11][11][11][11][11][11][11]这样的数组中,其中每个值都有6个整数作为键。但是,此数组将非常稀疏,因为我只访问了少数可能的状态。有没有更好的方法来表示状态值的键?

c++ multidimensional-array data-structures key memoization
1个回答
1
投票

如果您不需要在每个州都拥有价值,可以使用地图来逃脱

概念代码,完全未经测试。

constexpr int dimension = 6;
using KeyType = std::array<char, dimension>;
int32_t Key(const & KeyType keys) {
  int32_t res = 0;
  for (auto key : keys) {
    res <<= 4;
    res += key;
  }
  return res;
}

void Key2Array(int32_t keyValue, KeyType& keys) {
  int idx = dimension-1;
  for (auto& key : keys) {
    keys[idx--] = keyValue&0x16;
    keyValue >>= 4;
  }
}

std::map<int32_t, value> states;

states[Key({1,2,3,4,5,6}] = 42;

KeyType key;
Key2Array(0x123456, key);
© www.soinside.com 2019 - 2024. All rights reserved.