所以我想创建一个包含九个元素的数组,但我希望索引由我指定,也就是说,而不是访问我的数组的元素,
std::array<bool,9> myarray
使用 myarray[0], myarray[1], myarray[2]...
我想访问它们,例如,作为
myarray[21], myarray[34], myarray[100], myarray[9], myarray[56]...
但仍然保留了标准库数组的特性,只存储了9个元素。
更具体地说,我需要轻松访问 bool 矩阵的元素。 也就是说,假设我有矩阵:
Array<array<bool,100>,100> mymatrix;
并且它将用于简单地使用 mymatrix[x][y]
检查某些位置(比如位置 x,y)。我也知道有些元素永远不会被检查,所以它们并不是真正需要的。为了尽可能节省内存,想法是摆脱那些不需要的元素,但仍然保留结构以检查我的元素。
最佳答案
这样的数组最好用标准 C++ 库提供的关联容器之一表示 - 即 std::map<int,bool>
或 std::unordered_map<int,bool>
.这些容器提供了一种在 C++ 中执行此操作的惯用方法。
使用关联容器的一个额外好处是能够迭代值及其外部“索引”。
如果您坚持使用数组来存储值,您将不得不创建自己的类来构建外部和内部索引之间的“映射”。这将在 O(1) 访问时间内占用大量内存,使用 CPU 周期进行二分搜索以及索引到索引映射,使用线性搜索,或者对外部索引进行硬编码。
关于c++ - 具有自定义索引的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29461326/