c++ - 具有自定义索引的数组

标签 c++ arrays

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

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/

相关文章:

C++/QML序列数据交换

c++ - 使用统一初始化初始化对象和指针对象不起作用

c++ - 将别名模板转换为别名类型

C++ 仿函数和模板 : error: declaration of 'class List<T>'

actionscript-3 - Array.filter 动态测试值

arrays - F# 多维数组推导式

c++ - 在初始化的未知大小数组中使用 sizeof() - C++

javascript - 如何将类数组B+树转换为类哈希B+搜索树?

c++ - 堆栈溢出后调用 SymSetOptions 时出现 AccessViolation

python - 如何将 1d 数组转换为 3d 数组(将灰度图像转换为 rgb 格式)?