如何使用用户定义的比较结构重置C ++映射

时间:2018-02-16 03:39:09

标签: c++ dictionary comparison

(很奇怪这个问题不能问,因为它看起来像是家庭作业?)

问题是如何使用用户定义的参数化比较结构在地图中定义reset()函数,这可能会更改地图的比较结构。是否有可能在里面定义它?我应该定义复制构造函数和其他东西吗?

我猜是间接的,我可以在外面使用指针:每次我需要重置时,我只是删除旧对象并定义一个新对象。但这很难看。我想知道是否有更直接的方法。

以下问题std::map change key_comp after initialization可能有关,但不一样。

我有以下代码:

     struct MapStruct {
         struct My_CMP  {
             char _dirc;
             bool operator() (int a, int b) {
                 return _dirc == 'X' ? a < b : a > b;
             }
         };

         char _dirc; 
         map<int, int, My_CMP> _mapStruct;
         MapStruct(char dirc): _dric(dirc), _mapStruct(My_CMP(_dirc)) {}
         void reset(char dirc) {???}             
     };

1 个答案:

答案 0 :(得分:1)

没有简单或直接的方式来重置&#34;地图。您需要使用新比较器创建新地图,然后将旧地图中的所有元素复制到新地图。然后,您需要将新地图复制到旧地图。

幸运的是,在代码方面它非常简单,可以用一行完成:

// Create new map, elements copied from the old,
// with new comparator, and copy over to old map
_mapStruct = map<int, int, My_CMP>(_mapStruct.begin(), _mapStruct.end(), My_CMP(dirc));

这是有效的,因为两个地图的比较类型相同(My_CMP)。