-1

我很困惑在两种方法之间进行选择以获得 STL 结构,

方法一:

map<pair<string,int>,map<string,map<ULONG,vector<string>>*>*>

方法B:

以上是可取的还是有一个单独的地图,如下所示,

map<pair<string,int>,vector<string>>

从这个父映射查询后,然后迭代向量并查询第二个映射

map<string,map<ULONG,vector<string>>*>

在上述两种方法中,哪种方法是最佳方法,哪种方法会导致更多的性能开销?

更新1:

我的目标是将输出日志存储在具有三组的内存中。最外面的键“对”是父分组,它有自己的子组。每个子组都有自己的组。

在 TypeDef 之后的方法 A:

  typedef map<ULONG,vector<string>> Sub_Map2;
   typedef map<string,Sub_Map2*> Sub_Map1;
   typedef map<pair<string,int>,Sub_Map1*> Parent_map;

为了更好的可读性

4

2 回答 2

2

不要进行过早的优化。使用干净的代码并仅在您发现该代码存在瓶颈时尝试对其进行优化。使用 typedef 以保持可读性。

即(我不知道你想如何组织它)。

typedef map<ULONG, vector<string>> IDLogMap;
typedef map<pair<string, int>, IDLogMap> PairLogMap;

无论如何,我建议你重构一些代码,创建一些日志消息类等等,因为map<pair<string,int>,map<string,map<ULONG,vector<string>>*>*>这对我来说有点太复杂了,特别是如果你想获得特定的日志消息。另外,尽量避免使用原始指针。

于 2015-09-21T09:37:00.520 回答
0

std::map将分别分配每个键值对,因此当您从映射中插入或删除元素时不会重新分配。这意味着,两个版本之间没有开销差异(除了额外的查找)。

也就是说,如果您需要自己迭代内部映射,选项 B 可能会更好 - 如果您不这样做,则无需使代码复杂化。

于 2015-09-21T10:11:59.950 回答