(很奇怪这个问题不能问,因为它看起来像是家庭作业?)
问题是如何使用用户定义的参数化比较结构在地图中定义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) {???}
};
答案 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
)。