【问题标题】:sorting vectors based on size()根据 size() 对向量进行排序
【发布时间】:2011-01-23 15:29:33
【问题描述】:

我有一个像vector < vector < coordinates > > v( points); 这样的二维向量,其中坐标类是:

class coordinate{
    public :
    int x;
    int y;
    coordinate(){
        x=0;
        y=0;
    }

};

点数是 20。 如何基于 v[i].size() 对单个向量 v[i] 进行排序,即基于推入 v[i] 的坐标对象的数量。 ???

【问题讨论】:

    标签: c++ sorting vector


    【解决方案1】:

    1) 制作一个根据大小比较两个向量的函数:

    bool less_vectors(const vector& a,const vector& b) {
       return a.size() < b.size();
    }
    

    2) 用它排序

    sort(v.begin(),v.end(),less_vectors);
    

    【讨论】:

    • 你的意思可能是return a.size() &lt; b.size();
    • @Martin:那么应该是std::less&lt;size_t&gt;()(a.size(), b.size())。几乎没有任何理由在这里使用 less,因为它所做的只是包装 operator&lt; 来比较值。
    • 我们是在争论风格还是正确性?实际上,我最初输入 std::less 是因为我预计如果我输入一个简单的
    • @Martin:std::less 从什么时候开始成为一个函数?你看过你发布的参考资料吗? - @Will:IMO 函数对象的使用在这里完全不合适。如果你要添加两个整数,你不会想到去int c = std::plus&lt;int&gt;()(a, b);? ;) std::less 有其他用途,例如当您想将常量绑定到谓词时:std::find_if(x, y, std::bind2nd(std::less&lt;int&gt;(), 0))
    • 我认为 OP 可能一直想知道是否已经存在 less_vectors 或 less_containers 函数,因此他/她不需要费力地弄清楚在哪个标头中放置适合的内容在他/她编写的所有软件中普遍使用。
    【解决方案2】:
    1. 创建一个函数,您可以使用任何属性来比较对象,然后使用 STL sort() 算法对容器进行排序。

    2. 重载该类的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-05
      • 1970-01-01
      • 1970-01-01
      • 2011-10-09
      • 2018-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多