我被指派为游戏实施核心数据库。
这是int X <--> int Y
的1:N地图。 (例如pirateship<->its turrets
)
我肯定知道0<=X<=1000
和0<=Y<=10000
大多数指数被使用/占用,即密集。
某个X
可以映射到多个Y
某个Y
可以映射到0-1 X
。
我梦想有一个数据结构: -
X->Y
(返回Array<int>
)和Y->X
(快速返回int
)0-10000
的值Y
。问题:
std::unordered_multimap<int,int>
(probably red-black tree)或std::unordered_map<int, std::vector<int>>
(编辑:感谢一些程序员老兄)
:(
std::vector<int, std::vector<int>>
- 我目前的做法
std::vector<int>
)需要大量动态分配vector to store X=0 -> Y=?
会远离vector to store X=1 -> Y=?
有没有更好的方法?
对不起,如果这是一个常见问题,
我无法找到与此完全匹配的任何内容。
答案 0 :(得分:2)
这个怎么样?
typedef vector< int > Turrets;
struct PirateShip
{
int ship;
Turrets turrets;
};
typedef vector< PirateShip > Ships;
Ships pirates;
这样做,每艘船都有0到N个炮塔。
您可以将0从0放到容器内的船只上。
您只需更改typedef即可更改容器。
typedef set< PirateShip > Ships;
或
typedef list< PirateShip > Ships;
或
typedef deque< PirateShip > Ships;
你明白了。 : - )