c++ - 如何更好地表示 6 个整数键而不是作为 6 维数组的索引?
问题描述
在我的程序中,一个状态可以由六个整数唯一标识。每个整数,i
满足0 <= i <= 10
并且每个状态都有一个关联的值。我目前正在使用 6 维数组来跟踪每个状态值。我将状态值存储在这样的数组中state[11][11][11][11][11][11][11]
,其中每个值都有 6 个整数作为键。但是,这个数组会非常稀疏,因为我只访问少数可能的状态。有没有更好的方法来表示状态值的关键?
解决方案
如果您不需要在每个州都有一个值,那么您可以使用地图逃脱
概念代码,完全未经测试。
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);
推荐阅读
- c# - Access Denied when creating SQLite DB file
- android - 如何改进对细胞信号强度的监测
- reactjs - React componentWillUnmount - 如果组件无论如何都会从DOM中删除并因此停止计时器等,为什么要取消任何东西?
- laravel-5 - 不允许写入 /Users/ahmed.d.hamdallah/.config/psysh/psysh_history
- java - 如何在 Kotlin 中创建一个类的实例并覆盖它的函数?
- reactjs - 容器化的 webpack-dev-server 不响应文件更改
- javascript - 改变 skewY 角度 onresize 窗口
- javascript - 使用 Axios 调用从目录中获取所有图像
- javascript - 如何阻止快速点击破坏我的代码?
- google-cloud-platform - 设置 Cloud VPN 隧道