在 C++ 中创建一个巨大的标志图

Create a huge flag map in C++

所以基本上,我需要的是有 28,800 个值可以通过索引访问,并且可以全部设置为 true 或 false。使用布尔值或整数数组不是一种选择,因为需要在运行时使用参数设置大小。使用向量太慢并且占用大量内存。我是 C++ 的新手,因此不知道如何解决这个问题,有人可以帮忙吗?

编辑:感谢所有发表评论的人!就像我说的,我是 C++ 编程的新手,您的回答确实帮助我理解了向量背后的功能。 所以,在每个人都说 vector 不慢之后我又检查了一下,结果发现我的程序 运行ning 这么慢是因为我在填充 vector 时遇到了另一个错误。但尤其是 midor 和一些程序员老兄的回答帮助我使程序 运行 比以前快了一点,非常感谢!

Using a vector is way too slow and memory intensive.

C++ 特化了 std::vector<bool>,因此它只使用它需要的内存。每 "flag" 一位(当然还有簿记开销)。

如果你先验地知道它的大小(根据你的问题你不知道),或者如果你知道位图将只包含很少的设置位(例如 50 位中的 1 位),你只能优化该实现'000,但您需要衡量更复杂的实施是否值得)。对于稀疏位图,可以选择存储设置位的 std::unordered_set<std::uint32_t>

但是 28'800 是一个非常小的数字,所以不要将时间浪费在优化上。您不会从中获得任何好处。