gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:04:35 25 4
gpt4 key购买 nike

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

问题是如何在具有用户定义的参数化比较结构的映射中定义 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) {???}
};

最佳答案

没有简单或直接的方法来“重置” map 。您需要使用新比较器创建一个新 map ,然后将所有元素从旧 map 复制到新 map 。然后你需要将新 map 复制到旧 map 。

幸运的是,就代码而言,这一切都非常简单,只需一行即可完成:

// 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));

之所以可行,是因为两个 map 的比较类型相同 (My_CMP)。

关于c++ - 如何使用用户定义的比较结构重置 C++ 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48819715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com