在MyClass的一个数据成员上排序Vector <MyClass>?

use*_*112 -2 c++ sorting stl vector

我想创建一个类,调用它MyClass有三个数据成员a,b和c.然后我希望将许多MyClass对象放入a中std::Vector<MyClass>,然后根据数据成员对Vector进行排序.

使用STL有一种优雅的方式吗?我不想重新发明轮子,我相信这不是第一次.在Java中我想我会使用Comparator.

Mar*_*som 5

有三种方法可以使用std::sort.

  • operator<MyClass类中实现一个函数.
  • 将函数传递给sort两个const &MyClass引用参数,并bool true在第一个对象小于第二个时返回.
  • 将仿函数对象(实现的类operator())传递给sort; 与独立功能一样,operator()应该取两个const &MyClass参数并返回一个bool.由于对象可以具有内部状态,因此您可以使用它来动态确定要排序的字段,例如,排序应该是升序还是降序.

第一种选择:

bool MyClass::operator<(const MyClass &rhs)
{
    return a < rhs.a;
}

std::sort(vec.begin(), vec.end());
Run Code Online (Sandbox Code Playgroud)

第二种选择:

bool CompareMyClass(const MyClass &lhs, const MyClass &rhs)
{
    return lhs.a < rhs.a; // this function will need to be declared friend if a is private
}

std::sort(vec.begin(), vec.end(), CompareMyClass);
Run Code Online (Sandbox Code Playgroud)

第三种选择:

struct MyFunctor
{
    bool operator()(const MyClass &lhs, const MyClass &rhs) const
    {
        return lhs.a < rhs.a;
    }
};

std::sort(vec.begin(), vec.end(), MyFunctor());
Run Code Online (Sandbox Code Playgroud)