全部, 我有以下问题。
考虑以下类(class):
class A
{
public:
.....
private:
int m_a, m_b;
double m_c;
};
我有一个此类对象的 vector 。
此 vector 在网格中呈现给用户,他可以单击列标题对网格( vector )的元素进行排序。 问题来自这样一个事实,即用户可以按住 CTRL 键并单击行标题,在这种情况下,网格( vector )应按 2 列(类成员)排序。
我可以编写一个简单的排序器类,它将根据一个成员(列)进行排序,但我真的不明白如何选择第二个排序列并进行排序。
有人可以帮忙吗?
最佳答案
最简单的方法是依次按每一列排序,从最不重要的列开始。因此,如果用户选择按a 然后b 然后c
排序,那么您首先按c
排序,然后按b
排序,最后您按 a
排序。最后两个排序(b
和 a
)必须是一个稳定排序(std::stable_sort
),它为其他相同的元素保留现有顺序。
另一种方法——几乎肯定更快但可能不实用——是使用自定义比较函数。但是想出自定义比较功能并不容易。在您提供的示例中,只有三个变量,那么只有六个可能的比较函数(一个用于 a、b、c 的每个排序——您可以将未指定的列放在末尾)但在一般情况下您最终有太多的可能性无法列举。您可以使用一组复杂的 switch 语句来编写一个通用比较器,但该比较器的开销很可能不仅仅是对 vector 进行多次排序。
关于c++ - vector 的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19762822/