std :: vector sort无效

时间:2016-08-03 05:54:31

标签: c++ sorting vector stl

我试图对包含结构的向量进行排序。我必须根据结构中的成员进行排序。排序我使用std :: sort函数和参数作为结构引用和成员来检查条件。

QStringList keys =  m_pLDFFrameMap.keys();

    foreach (QString key, keys) {
        LDFFrameData frmData = m_pLDFFrameMap.value(key);
        vector<LDFSignalsData> myList;
        QList <LDFSignalsData>sigData = frmData.m_SignalDataList;
        for (int i =0; i < sigData.size(); i++) {

            LDFSignalsData signal = sigData.at(i);
            qDebug()<<"Before signal:"<<signal.startBits<<"Name:"<<signal.frameSignals;
            myList.push_back(signal);
        }

        foreach (LDFSignalsData sig1, myList) {
            qDebug()<<"Signal act data:"<<sig1.startBits<<"Name:"<<sig1.frameSignals;

        }
        sort(myList.begin(), myList.end(), sortingSignals);
        for(int i =0; i < myList.size(); i++) {
            qDebug()<<"After sorting signal:"<<myList.at(i).startBits<<"Name:"<<myList.at(i).frameSignals;
        }
    }

并且sortSignals()的排序函数是

bool sortingSignals(const LDFSignalsData &first, const LDFSignalsData &second)
 {

    if (first.startBits < second.startBits)
        return true;
      else
        return false;
 }

但是输出没有达到要求。这是我的日志消息

  

信号行为数据:&#34; 0 &#34;姓名:&#34; LIN_Comm_Status&#34;

     

信号行为数据:&#34; 1 &#34;姓名:&#34; Motor_Relay_Fault&#34;

     

信号行为数据:&#34; 2 &#34;姓名:&#34; Hall_Fault&#34;

     

信号行为数据:&#34; 3 &#34;姓名:&#34; Thermal_Protection_Active&#34;

     

信号行为数据:&#34; 4 &#34;姓名:&#34; Motor_Reversing&#34;

     

信号行为数据:&#34; 5 &#34;姓名:&#34; Uncalibration_Mode&#34;

     

信号行为数据:&#34; 6 &#34;姓名:&#34; SS_LINBus_com_state&#34;

     

信号行为数据:&#34; 8 &#34;姓名:&#34; Switch_Input_Status&#34;

     

信号行为数据:&#34; 16 &#34;姓名:&#34; PosnSts1_Glass&#34;

     

信号行为数据:&#34; 32 &#34;姓名:&#34; App_Version_DayNo&#34;

     

信号行为数据:&#34; 40 &#34;姓名:&#34; App_Version_WeekNo&#34;

     

信号行为数据:&#34; 48 &#34;姓名:&#34; App_Version_Year&#34;

     

信号行为数据:&#34; 24 &#34;姓名:&#34; PosnSts2_Blind&#34;

     

信号行为数据:&#34; 11 &#34;姓名:&#34; TSts_Glass&#34;

     

信号行为数据:&#34; 12 &#34;姓名:&#34; TSts_Blind1&#34;

和排序后

  

分拣信号后:&#34; 0 &#34;姓名:&#34; LIN_Comm_Status&#34;

     

分拣信号后:&#34; 1 &#34;姓名:&#34; Motor_Relay_Fault&#34;

     

分拣信号后:&#34; 11 &#34;姓名:&#34; TSts_Glass&#34;

     

分拣信号后:&#34; 12 &#34;姓名:&#34; TSts_Blind1&#34;

     

分拣信号后:&#34; 16 &#34;姓名:&#34; PosnSts1_Glass&#34;

     

分拣信号后:&#34; 2 &#34;姓名:&#34; Hall_Fault&#34;

     

分拣信号后:&#34; 24 &#34;姓名:&#34; PosnSts2_Blind&#34;

     

分拣信号后:&#34; 3 &#34;姓名:&#34; Thermal_Protection_Active&#34;

     

分拣信号后:&#34; 32 &#34;姓名:&#34; App_Version_DayNo&#34;

     

分拣信号后:&#34; 4 &#34;姓名:&#34; Motor_Reversing&#34;

     

分拣信号后:&#34; 40 &#34;姓名:&#34; App_Version_WeekNo&#34;

     

分拣信号后:&#34; 48 &#34;姓名:&#34; App_Version_Year&#34;

     

分拣信号后:&#34; 5 &#34;姓名:&#34; Uncalibration_Mode&#34;

     

分拣信号后:&#34; 6 &#34;姓名:&#34; SS_LINBus_com_state&#34;

     

分拣信号后:&#34; 8 &#34;姓名:&#34; Switch_Input_Status&#34;

我必须根据成员开始位对列表中的结构进行排序,但即使正确的升序向量也没有正确排序。

1 个答案:

答案 0 :(得分:8)

您的排序结果是字符序列,例如“2”&lt; “24”&lt; “3”。

我相信您的“startBits”类似于std::string,而您的sortingSignals()正在比较string而不是值。

所以你的排序正在发挥作用,但另一方面。

要真正得到您想要的结果,您可以将string转换为int并比较int

中的sortingSignals()