我正在编写游戏的逻辑部分,并希望创建,检索和存储值(整数)以跟踪进度。例如,门会在std :: map中创建对("location.room.doorlock"
,0
),解锁此门会将该值设置为1
。每当玩家想要通过这扇门时,它将通过该键名检索该值以查看它是否可以通过。 (只是一个例子,但重要的是这些信息存在于“门”对象本身之外,因为字符或其他事件可能会检索此数据并对其进行操作。)
问题是,名称(或地图键)本身远远大于它所指的数据,这看起来很浪费,结果感觉“错误”。
是否存在常用或最佳方法来存储此类数据,其中密钥不比数据本身大得多?
如果重要的话,可以知道在编译时为进度数据本身分配多少空间。它也不需要使用std::map
,只要我不必使用原始数组索引来获取或存储数据。
答案 0 :(得分:1)
看起来你有两个选择,如果你真的想减小字符串的大小(尽管字符串长度似乎并不那么糟糕)。
您可以只更改命名约定或实现散列。散列可以以散列映射(也称为无序映射)的形式实现,也可以手动实现(您可以创建一个将名称散列为int的小程序,然后将其作为一对使用)。哈希映射/无序地图可能是您最好的选择,因为它有很多支持代码,您不必承担在您自己的程序中处理错误的风险。
http://www.cplusplus.com/reference/unordered_map/unordered_map/