c ++ std :: sort()由任何可比成员仅使用一个比较函数的对象向量

Mat*_*son 1 c++ sorting stl vector

是否可以调用std::sort()std::vector的,我们可以指定哪些成员将被用来比较的对象这样的对象,但不必实现为每个成员一个独立的比较功能.我们可以假设我们要排序的每个成员都将<定义运算符.如果没有,当我们希望能够按照许多不同的标准对对象容器进行排序时,最好的方法是什么.

Mar*_*som 7

您可以拥有一个比较对象,该对象具有一个标志,指示要排序的成员.

class Comparo
{
    int m_field;
public:
    Comparo(int field)  : m_field(field) { }
    bool operator()(const MyClass & Left, const MyClass & right)
    {
        switch (m_field)
        {
            case 0:
                return left.A < right.A;
            case 1:
                return left.B < right.B;
        }
    }
};

std::vector<MyClass> vec = FillMyVector();
std::sort(vec.begin(), vec.end(), Comparo(0));  // sorts on field A
std::sort(vec.begin(), vec.end(), Comparo(1));  // sorts on field B
Run Code Online (Sandbox Code Playgroud)