【问题标题】:Sort vector of vectors of objects对象向量的排序向量
【发布时间】:2015-12-04 21:05:42
【问题描述】:

我有一些这样的向量:

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

但这对我来说并不奏效。

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

【问题讨论】:

  • 你猜为什么?请检查您所写的内容。
  • 请在您的问题描述中加入一些工作。一旦获得详细的问题描述,请提供 MCVE。 stackoverflow.com/help/mcve
  • @user3653164 vector&lt;vector&lt;Object&gt;&gt; 不是vector&lt;Object&gt;,以防你仍然不明白。

标签: c++ sorting oop vector std


【解决方案1】:

您有一个包含vector-s 的vector。您还有一个函数对象,可以对包含Object-s 的vector-s 进行排序。这意味着您的排序函子可以排序vector&lt;Object&gt;-s,而不是vector&lt;vector&lt;Object&gt;&gt;-s。

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

【讨论】:

    【解决方案2】:

    如果你有这个:

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

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

    【讨论】:

      猜你喜欢
      • 2013-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 2016-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多