Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为一个类实现多个顺序关系?_C++ - Fatal编程技术网

C++ 为一个类实现多个顺序关系?

C++ 为一个类实现多个顺序关系?,c++,C++,对于一个类,哪种方法是实现多个顺序关系的最佳方法?我有一个想法,但我不确定这是一个好主意。如果没有最好的方法,为什么?创建一个函子类,并用您想要使用的顺序关系初始化一个成员。让运算符()使用成员决定两个操作数的顺序 class Ordering { public: Ordering(int method) : _method(method) {} bool operator()(const MyObject & first, const MoObject & se

对于一个类,哪种方法是实现多个顺序关系的最佳方法?我有一个想法,但我不确定这是一个好主意。如果没有最好的方法,为什么?

创建一个函子类,并用您想要使用的顺序关系初始化一个成员。让
运算符()
使用成员决定两个操作数的顺序

class Ordering
{
public:
    Ordering(int method) : _method(method) {}
    bool operator()(const MyObject & first, const MoObject & second) const
    {
        switch(_method)
        {
            case 0:
                return first.name < second.name;
            case 1:
                return first.age < second.age;
            // ...
        }
    }
    int _method;  // an enum would be better
};

std::sort(myobjs.begin(), myobjs.end(), Ordering(selected_method));
类排序
{
公众:
排序(int方法):_方法(方法){}
布尔运算符()(常量MyObject&第一,常量MoObject&第二)常量
{
开关(_方法)
{
案例0:
返回first.name
我认为策略是一种更好的方法,我不太确定切换结构是否是一个好主意(想象一下,一个切换中有1000个比较方法……太重了,不是吗?)

让我们来看一个,一个需要方法比较的类

我建议为每个方法创建一个类,哪个实例将是A的组件

例如:

class A{
    private:
    //Some attributes
    Comparator<A> comp_;

    public:
    //Some methods (including constructor)
    bool operator()(const MyObject & first, const MoObject & second) const
    {
        return comp_.compare(first,second);
    }
     void setComparator(Comparator<A>& comp){
        comp_ = comp;
    }
}


//Forgot the syntax about template. So there is a template with one parameter
class Comparator{
     public:
     //Constructor

     //To overwrite on subclasses
     virtual bool compare(T& first, T& second) = 0;


}
A类{
私人:
//一些属性
比较器;
公众:
//一些方法(包括构造函数)
布尔运算符()(常量MyObject&第一,常量MoObject&第二)常量
{
返回比较(第一,第二);
}
无效设置比较器(比较器和组件){
comp=comp;
}
}
//忘记了模板的语法。因此,有一个带有一个参数的模板
类比较器{
公众:
//建造师
//在子类上覆盖
虚拟布尔比较(T&first,T&second)=0;
}

通过这种配置,您可以轻松地添加一个方法,而无需修改方法,只需在程序执行的任何时刻设置正确的比较器。

您的问题太模糊了。你能详细说明一下吗?举一个简单的例子,“最佳”对于这个问题意味着什么?我以前做过一些Java。我们可以使用比较器或比较器。我想知道如何用C++的工具来模拟比较器的行为。