【问题标题】:how to sort vector with multi data?如何对具有多数据的向量进行排序?
【发布时间】:2013-08-26 06:23:41
【问题描述】:

我有这样一个向量:

struct StatFaces
{
    std::string faceName_1;
    std::string faceName_2;
    float percentagePerson ;
};

std::vector<StatFaces> listFaces_;

我想对该向量进行排序。但是我想用组对其进行排序。比如……

I have faceName_1 = john , faceName_2 = kate , percentagePerson = %90
       faceName_1 = john , faceName_2 = nastia , percentagePerson = %95
       faceName_1 = bill , faceName_2 = jamie , percentagePerson = %91 
       faceName_1 = bill , faceName_2 = anna , percentagePerson = %72

output should be ; 

faceName_1 = bill , faceName_2 = jamie, percentagePerson = %91
faceName_1 = bill , faceName_2 = anna , percentagePerson = %72
faceName_1 = john , faceName_2 = nastia , percentagePerson = %95
faceName_1 = john , faceName_2 = kate , percentagePerson = %90

排序算法必须先分组firstName_1,然后根据percentPerson排序

Ps:我不擅长c++

【问题讨论】:

    标签: c++ algorithm sorting vector


    【解决方案1】:

    您可以将自定义比较函数传递给std::sort。这可以使用std::tie 轻松实现:

    #include <tuple> // for std::tie
    
    bool cmp(const StatFaces& lhs, const StatFaces& rhs)
    {
      return std::tie(lhs.face_name1, lhs.percentagePerson, lhs.faceName_2) <
             std::tie(rhs.face_name1, rhs.percentagePerson, rhs.faceName_2);
    }
    

    然后

    #include <algorithm> // for std::sort
    
    std::sort(listFaces_.begin(), listFaces_.end(), cmp);
    

    std::tie 返回一个对参数的左值引用的元组,并且有一个字典小于比较bool operator&lt; 比较这些元组中的两个。效果是您在两个StatFaces 实例之间执行小于字典顺序的比较。 std::sort 在内部使用它来对元素进行排序。

    注意:std::tie 在 C++11 实现中可用。如果您没有 C++11 标准库实现,则可以使用标头 &lt;tr1/tuple&gt;boost::tie 中的 std::tr1::tie。也可以手动实现比较功能cmp。这是一个很好的练习,但它既乏味又容易出错。

    【讨论】:

    • 对不起,你能解释一下吗,因为我不太懂 c++
    猜你喜欢
    • 2012-08-12
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-03
    相关资源
    最近更新 更多