【发布时间】:2018-09-22 10:28:30
【问题描述】:
我需要一个结构来跟踪某些项目的存在。我只是想获取一个数组 a0....aN 并将元素标记为 a[0]=0,a[1]=0,a[2]=1........(a[i]=1如果元素存在,a[i]=0 如果元素不存在)。
但项目范围从 -1000 到 +1000。可以通过将负值范围从 1001 到 2000 来完成。我需要知道 c++ 中是否有任何其他数据结构可以像数组一样工作并且具有负索引。感谢您的宝贵时间。
【问题讨论】:
-
不,没有。但不是映射 only 负值,我会移动 all 它们,所以你不需要区分,只需添加偏移量(即 -1000 是映射到 0,1000 映射到 2000)。当然,你可以把它包装到你自己的容器类中……
-
考虑使用其他类型的数据结构,而不是使用数组,并强制以某种方式对数组元素的索引和项目标识符使用相同的值。
std::map<int, bool>或std::set<int>似乎是适合这项工作的工具 -
@GianPaolo 我们也应该考虑
unordered的对应物。另一方面,仅移动索引就可以保证O(1)运行时与有序容器的 O(log(n)) 相比,并且不需要像无序容器那样进行散列和冲突处理。 -
@Aconcagua 您可以随时将
std::set<int>替换为您自己基于位数组编写的数据结构,只要您发现这是一项性能关键优化。如果不是这样,那么这样做可能会导致不必要的意外错误并浪费时间。
标签: c++ arrays data-structures