对于data1
中的每个元素,我需要弄清楚data2
中的哪些元素与之相关。另外,对于data2
中的每个元素,我需要弄清楚data1中的哪些元素与之相关。因此,我建立了一个相互的数据结构,如下所示:
01 class data1 {
02 // class variables
03 int id;
04 float d1_v1;
05 float d1_v2;
06 map<string, float> m_to_data2; // string is the keyword of data2, float recorded the reference info when data1 and data2 are related.
07 };
08
09 class data2 {
10 // class variables
11 int d2_v1;
float d2_v2;
12 list <int> src_id; // int is the id of data1
13 };
14
15 map<string, data2 *> map_2;
16 map<int, data1 *> map_1;
然后,我解析文件并填充map_1和map_2。我发现:
list <int> src_id
),内存使用量:392.7M。 list <int> src_id
,内存使用:182.0M list <int> src_id
,内存使用量:289.7M map<string, float>
m_to_data2的大小,范围为3-17522 list <int> src_id
大小,范围为1-1377 设置相互链接的映射后,我需要减少内存使用(理想情况是少于200M,如上图所示,目前为498M)。我试图通过设置一个额外的
map <string, int>
将字符串(data2的关键字)标记为int,因为int比string需要更少的内存,但是由于我需要map <string, int>
额外的内存,所以它可能没有太大帮助。有什么建议么?非常感谢您的意见/建议。
最佳答案
我将从以下内容开始:
map
更改为unordered_map
。 list
中的data2
更改为vector
。 unordered_map
,它从string
映射到unsigned
id
,并在您当前使用字符串的任何地方使用该id
。给定m_to_data2
的大小范围为3-17k,您将重复很多名称。 关于c++ - 征求有关数据结构用法的建议,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5793856/