对对象矢量的矢量进行排序

Sort vector of vectors of objects

本文关键字:排序 对象      更新时间:2023-10-16

我有一些向量中的向量,如下所示:

vector<vector<Object> > vec;

我还有一个std::sortcomp函数的结构

struct SortByName {
    bool operator() (Object& o1, Object& o2) {
        return o1.getName() < o2.getName();
    }
} _sortByName;

然后我初始化我的排序方法:

void Object::sort_by_name() {
    std::sort(vec.begin(), vec.end(), _sortByName);
}

但这对我来说并不奏效。

所以,我有两节课。一个类只是在向量中填充另一个类的对象。然后我制作更多的物体向量,并将它们推到向量的向量中。然后我想按名称或其他东西对大向量中向量的对象进行排序。

您有一个包含vector-s的vector。您还有一个函数对象,可以对包含Object-s的vector-s进行排序。这意味着您的排序函子可以对vector<Object>-s进行排序,而不能对vector<vector<Object>>-s进行排序。

您必须编写另一个能够对vector<vector<Object>>-s进行排序的函子,例如根据它们的大小。

如果你有这个:

vector<vector<Object>> vec;

您可以对所有嵌套向量进行排序:

for(auto &nested_vec : vec)
    std::sort(nested_vec .begin(), nested_vec .end(), _sortByName);

或者只有一个特定的嵌套矢量:

std::sort(vec[index].begin(), vec[index].end(), _sortByName);

这很简单。然而,如果您想在嵌套向量之间执行排序,则需要更复杂的算法,您应该质疑自己为什么首先选择使用向量中的向量。