带自定义索引的数组

D1X*_*D1X 3 c++ arrays

所以我想创建一个包含九个元素的数组,但是我想要由我指定索引,也就是说,而不是访问我的数组元素,

std::array<bool,9> myarray
Run Code Online (Sandbox Code Playgroud)

使用myarray[0], myarray[1], myarray[2]...我想访问它们,例如,as

myarray[21], myarray[34], myarray[100], myarray[9], myarray[56]... 
Run Code Online (Sandbox Code Playgroud)

但仍保留标准库数组的属性并仅存储9个元素.

更具体地说,我需要轻松访问布尔矩阵的元素.也就是说,假设我有矩阵:

Array<array<bool,100>,100> mymatrix;
Run Code Online (Sandbox Code Playgroud)

并且它将被用于简单地使用来检查某些位置(说位置x,y) mymatrix[x][y].我也知道有些元素永远不会被检查,所以它们并不是真正需要的.为了节省尽可能多的内存,我们的想法是摆脱那些不需要的元素,但仍然保留结构来检查我的元素.

das*_*ght 6

这样的数组最好用标准C++库提供的一个关联容器表示 - 即a std::map<int,bool>或a std::unordered_map<int,bool>.这些容器提供了一种在C++中执行此操作的惯用方法.

使用关联容器的另一个好处是能够迭代值及其外部"索引".

如果您坚持使用数组来存储值,则必须创建自己的类,以在外部索引和内部索引之间构建"映射".这将占用大量内存用于O(1)访问时间,使用CPU周期进行二进制搜索以及索引到索引映射,使用线性搜索或硬编码外部索引.