我很困惑在两种方法之间选择一个STL结构,
方法:
map<pair<string,int>,map<string,map<ULONG,vector<string>>*>*>
方法B: 是上面的建议,还是像下面这样有单独的映射,
map<pair<string,int>,vector<string>>
从父映射中查询后,遍历vector并查询第二个映射
map<string,map<ULONG,vector<string>>*>
在以上两种方法中,哪一种是最优的方法,哪一种会导致更多的性能开销?
更新1:我的目标是将输出日志存储在内存中,内存有三组..最外面的键"pair"是父组,它有自己的子组。每个子组都有自己的组
方法A:
typedef map<ULONG,vector<string>> Sub_Map2;
typedef map<string,Sub_Map2*> Sub_Map1;
typedef map<pair<string,int>,Sub_Map1*> Parent_map;
为了更好的可读性
不要过早优化。使用干净的代码,并尝试优化它,只有当你看到瓶颈的代码。使用typedef是为了保持可读性。
。(我不知道你想怎么组织)。
typedef map<ULONG, vector<string>> IDLogMap;
typedef map<pair<string, int>, IDLogMap> PairLogMap;
无论如何,我建议你重构一点你的代码,创建一些日志消息类等等,因为map<pair<string,int>,map<string,map<ULONG,vector<string>>*>*>
对我来说有点太复杂了,特别是如果你想获得一个特定的日志消息。另外,尽量避免使用原始指针。
std::map
将分别分配每个键值对,因此当您从映射中插入或删除元素时不会进行重新分配。这意味着,两个版本之间没有开销差异(除了额外的查找)。
也就是说,如果您需要自己迭代内部映射,则选项B可能更好——如果您不需要,则无需使代码复杂化。