gpt4 book ai didi

c++ - 如何在 C++ 中返回具有不同比较器的映射?

转载 作者:行者123 更新时间:2023-12-02 02:29:34 26 4
gpt4 key购买 nike

如果我的类(class)有 2 std::map属性,都具有不同的比较器,那么我如何编写一个函数来返回它们中的任何一个?例如:

class Test {
public:
std::map<int, int> &get_map(int id) {
if (id == 1)
return map_1;
else
return map_2;
}

private:
std::map<int, int, std::less<int>> map_1;
std::map<int, int, std::greater<int>> map_2;
};

这里编译器将失败,因为 map_2不是std::map<int, int> 。我也尝试过std::map<int, int, std::binary_function<int, int, bool>>作为返回类型,但这也不起作用。

最佳答案

没有办法编写一个可以直接返回的函数,因为它们具有不同的类型(没有共同的基类)。但是,您可以拥有一个函数模板:

template<class Comp>
std::map<int, int, Comp>& get_map();

这里,id 是多余的,因为成员是由模板参数标识的。

<小时/>

或者您可以将指向任一标记的 union 的指针包装起来,然后返回该指针。例如:

std::variant<
std::map<int, int, std::less<int>>*,
std::map<int, int, std::greater<int>>*
>
get_map(int id);
<小时/>

面向对象的方法可能根本不提供 getter,而只对类内的映射进行操作。

关于c++ - 如何在 C++ 中返回具有不同比较器的映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61060451/

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