这个问题可能听起来有些荒谬,但也许可能。
首先是一些信息: 我正在为体素地形引擎创建一个块管理系统。 每个块必须能够访问其6个相邻块中的每一个。所以每个块都包含指向他的6个邻居的指针。这就是为什么块的内存位置不能改变的原因。目前我的设置如下:
ChunkMap chunks; // unordered_map of chunks
ChunkSet createdChunks; // set of pointers to unordered_map entries
ChunkSet generatedChunks; // set of pointers to unordered_map entries
vector<Chunk*> renderedChunks;
由于unordered_map更改了其entrys的位置,这会导致错误,因为指向chunk邻居的指针正在访问错误的位置。
要点: 数据类型应
提前致谢!
答案 0 :(得分:0)
持久的内存位置和动态大小不会同时发生(至少没有任何std::
个容器)。
您有三个主要选择:
任何容器的效率实际上取决于您正在进行的操作 - 在std::vector
中插入和删除效率不高,但是遍历所有元素是。插入和删除在std::list
中很好,但是从元素到元素的步行涉及指针追逐,这对效率不是很好。基于某些键查找std::map
非常有效,插入/删除相对有效,但遍历所有内容与std::list
类似。 std::unordered_map
有点像std::vector
用于插入[当它变得太大时,它会重新分配整个表格],但是找到特定元素的速度非常快。