排序对象向量的矢量

时间:2015-12-04 21:05:42

标签: c++ sorting oop vector std

我有一些像这样的矢量矢量:

vector<vector<Object> > vec;

我还有comp

std::sort函数的结构
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);
}

但这对我没有用。

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果你有这个:

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);

这很简单。但是,如果你想在嵌套向量之间进行排序,它将需要一个更复杂的算法,你应该首先问自己为什么首先选择使用向量向量。