gpt4 book ai didi

C++ 动态分配 std::map 比较器

转载 作者:行者123 更新时间:2023-11-30 01:15:09 24 4
gpt4 key购买 nike

所以我有两个包含 std::map 成员的类,它们具有实际上相同的功能,除了一个映射的顺序是 std::less 而另一个 std::greater。

如果我创建一个抽象父类并声明一个映射成员,是否有任何方法可以在派生类构造函数中为该成员动态分配比较器?这样,功能显然可以全部驻留在父类中。

最佳答案

您无法在事后更改比较器。但是您可以使用相同的比较器类并在构造时获得“更大”或“更少”。你只需要一个有状态的比较器:

struct my_compare {
enum compare_type { less, greater };
explicit my_compare(compare_type t) : m_type(t) {}
template<class T, class U>
bool operator()(const T& t, const U& u) const {
if(m_type == less) { return t < u; }
else { return t > u; }
}
compare_type m_type;
};

然后你可以做

std::map<int, int, my_compare> less_map((my_compare(my_compare::less)));
std::map<int, int, my_compare> greater_map((my_compare(my_compare::greater)));

多出一对括号是因为it would otherwise be the most vexing parse , even though a function parameter declaration cannot have a qualified name .在 C++11 中,可以改用列表初始化(my_compare{mycompare::less})。


对于您的特定设计,实现可能如下所示

class A {
protected:
explicit A(my_compare::compare_type ct) : my_map(my_compare(ct)) {}
std::map<int, int, my_compare> my_map;
};

class B_less : public A{
public:
B_less() : A(my_compare::less) {}
};

关于C++ 动态分配 std::map 比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28955044/

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