【问题标题】:Sorting the contents of a vector in c++ [duplicate]在c ++中对向量的内容进行排序[重复]
【发布时间】:2013-09-01 16:23:37
【问题描述】:

我有一个包含一些对象的矢量容器。对象具有各种属性,主要是整数和字符串。我想要一个 STL 算法,用于按容器的不同属性对容器进行排序。 例如,如果棒球卡集合的球员姓名是字符串,球员开始打棒球的年份是整数,我如何按年份编号对向量容器进行排序,然后按球员姓名的字母顺序对其进行排序? 我从来没有真正学习过 STL,因为我的教授过去禁止使用它,所以我现在正在努力学习它,以便我可以更快地编程。

【问题讨论】:

    标签: c++ sorting vector


    【解决方案1】:

    std::sort() 函数使用二进制谓词作为第三个参数,可用于自定义排序顺序。您可以只使用两个不同的谓词:

     std::sort(v.begin() v.end(),
        [](card const& c0, card const& c1){
            return c0.name() < c1.name();
        });
    

    ...对于其他属性也是如此。

    【讨论】:

    • 谢谢,这更清楚了!
    【解决方案2】:

    你需要做的就是

    #include <algorithm>
    
    bool operator<(const MyObject& x, const MyObject& y)
    {
        ...
    }
    
    std::sort(vec.begin(), vec.end());
    

    使用operator&lt;定义你想要的顺序,如果x在排序后应该在y之前返回true,否则返回false。根据您的描述,听起来您想先比较年份,如果它们相等,则比较名称。

    为你的教授感到羞耻。

    【讨论】:

    • 不,我真的不关心中间的部分排序。我只想按名称排序,显示到屏幕,然后按年份排序,显示到屏幕。
    猜你喜欢
    • 2013-10-15
    • 2020-12-15
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-09
    • 2015-08-16
    • 1970-01-01
    相关资源
    最近更新 更多