c++中嵌套三个映射Vs单独映射的性能



我很困惑在两种方法之间选择一个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可能更好——如果您不需要,则无需使代码复杂化。

最新更新