c++ - 在索引和值类型上参数化的惯用 vector 类型

标签 c++ arrays data-structures containers parameterized-types

是否有一个连续容器的惯用 C++ 类型,它允许您指定值类型(如 std::vectorstd::array 所做的那样)和索引/大小类型?

我写了一些代码来操作很多数据数组,但是各种数组的索引可能有不同的语义,我想使用类型系统来防止我不小心使用索引错误的上下文。

例如,如果我正在管理 n 顶帽子和 m 辆汽车的集合,我可以从 0 开始为每顶帽子提供 ID最多 n-1 并且每辆汽车的 ID 从 0m-1 并且有各种帽子和汽车信息,但我不会' 想不小心使用汽车 ID 在一系列帽子信息中查找内容。

car_id model_t {0};
my::vector<hat_id, fabric> hat_materials { /*...*/ }
hat_materials[model_t]; // want this to be a compile error

现在我在采取恒定时间命中和使用 std::unordered_map 或花费一些开发时间将 std::vector 包装在一个添加第二个参数的自定义容器类。

最佳答案

Is there an idiomatic C++ type for a contiguous container that lets you specify both the value type (as std::vector does) and the index/size type?


您在这里面临的是我们必须做出的典型决定,权衡花费开发时间与使用 STL 已经提供给我们的东西之间的权衡。

在第一种情况下你将不得不花费一些时间,但希望获得更好的性能。

在第二种情况下,您的数据结构可以使用,但您可能会失去性能 w.r.t.您将要开发的数据结构。

如您所知,std::unordered_map , 提供恒定的查询时间,因此我就是你,我会继续使用这个数据结构(通过提供自定义实体(例如 CoryKramer 建议在评论中散列),尽可能地个性化它),当项目完成时,测试性能并寻找它的瓶颈。如果它是由无序映射引起的,那么 - 根据您当时的情况,您现在可能不完全知道 - 采取行动并开发自定义数据结构如果需要,这将起到作用。

关于c++ - 在索引和值类型上参数化的惯用 vector 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45654145/

相关文章:

java - int binarySearch 数组列表

c++ - 替换字符串中空格的策略

c++ - ‘operator=’ 的模糊重载与 c++11 std::move and copy and swap idiom

c++ - 与构建灵活设计的模板相比,多重继承机制

c++ - 命名空间中的堆栈跟踪和函数

java - 自适应优先级队列中位置的使用

c - C中Enqueue操作中的无限循环

c++ - 如果方法是在类内部定义的,则防止编译器删除方法

C++ 二维数组函数

c# - Linq 的 Skip and Take 是否针对数组进行了优化? [4.0版]