是否可以调用std::sort()
在 std::vector
上以这样一种方式我们可以指定将使用哪个成员来比较对象,而不必为每个成员实现单独的比较函数。我们可以假设我们要排序的每个成员都有 <
运营商定义。如果不是,当我们希望能够根据许多不同的标准对对象容器进行排序时,最好的方法是什么。
最佳答案
你可以有一个比较对象,它有一个标志,指示要对哪个成员进行排序。
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
关于c++ std::sort() 任何可比较成员仅使用一个比较函数的对象 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24847210/