c++ - vector 的排序

标签 c++ sorting stl

全部, 我有以下问题。

考虑以下类(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 排序。最后两个排序(ba)必须是一个稳定排序(std::stable_sort),它为其他相同的元素保留现有顺序。

另一种方法——几乎肯定更快但可能不实用——是使用自定义比较函数。但是想出自定义比较功能并不容易。在您提供的示例中,只有三个变量,那么只有六个可能的比较函数(一个用于 a、b、c 的每个排序——您可以将未指定的列放在末尾)但在一般情况下您最终有太多的可能性无法列举。您可以使用一组复杂的 switch 语句来编写一个通用比较器,但该比较器的开销很可能不仅仅是对 vector 进行多次排序。

关于c++ - vector 的排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19762822/

相关文章:

c++ - 浮点加法和乘法是关联的吗?

c++ - 请求 ‘insert’中的成员 ‘x’,非类类型

c++ - 如何在 C++ 中将包含复制构造函数的类的参数构造函数调用为私有(private)?

c++ - 可以使用松弛的内存顺序来观察条件吗?

c++ - 如何编译和链接 cddlib 库?

c++ - 对结构 vector 进行排序

c# - Linq 按升序排序 按降序排序

javascript - 在reactJS中按字母顺序排序

c++ - 配置比较函数以使用 std::sort

c++ - 标准化 2D/3D vector/坐标类