std :: vector sort不起作用

Wag*_*are -8 c++ sorting stl vector

我试图对矢量包含结构进行排序.我必须根据结构中的成员进行排序.排序我使用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;
        }
    }
Run Code Online (Sandbox Code Playgroud)

sortSignals()的排序函数是

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

    if (first.startBits < second.startBits)
        return true;
      else
        return false;
 }
Run Code Online (Sandbox Code Playgroud)

但输出并没有达到预期的效果.这是我的日志消息

信号动作数据:" 0 "名称:"LIN_Comm_Status"

信号动作数据:" 1 "名称:"Motor_Relay_Fault"

信号行为数据:" 2 "名称:"Hall_Fault"

信号动作数据:" 3 "名称:"Thermal_Protection_Active"

信号动作数据:" 4 "名称:"Motor_Reversing"

信号动作数据:" 5 "名称:"Uncalibration_Mode"

信号动作数据:" 6 "名称:"SS_LINBus_com_state"

信号动作数据:" 8 "名称:"Switch_Input_Status"

信号动作数据:" 16 "名称:"PosnSts1_Glass"

信号动作数据:" 32 "名称:"App_Version_DayNo"

信号动作数据:" 40 "名称:"App_Version_WeekNo"

信号动作数据:" 48 "名称:"App_Version_Year"

信号动作数据:" 24 "名称:"PosnSts2_Blind"

信号动作数据:" 11 "名称:"TSts_Glass"

信号动作数据:" 12 "名称:"TSts_Blind1"

并在排序后

排序信号后:" 0 "名称:"LIN_Comm_Status"

排序信号后:" 1 "名称:"Motor_Relay_Fault"

排序信号后:" 11 "名称:"TSts_Glass"

排序信号后:" 12 "名称:"TSts_Blind1"

排序信号后:" 16 "名称:"PosnSts1_Glass"

排序信号后:" 2 "名称:"Hall_Fault"

排序信号后:" 24 "名称:"PosnSts2_Blind"

排序信号后:" 3 "名称:"Thermal_Protection_Active"

排序信号后:" 32 "名称:"App_Version_DayNo"

排序信号后:" 4 "名称:"Motor_Reversing"

排序信号后:" 40 "名称:"App_Version_WeekNo"

排序信号后:" 48 "名称:"App_Version_Year"

排序信号后:" 5 "名称:"Uncalibration_Mode"

排序信号后:" 6 "名称:"SS_LINBus_com_state"

排序信号后:" 8 "名称:"Switch_Input_Status"

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

Min*_*ine 8

您的排序结果是字符序列,例如"2"<"24"<"3".

我相信你的"startBits"就像是std::string,而你sortingSignals()正在比较string而不是价值观.

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

要真正获得所需的结果,您可以转换stringint并比较intsortingSignals()

  • 嗯......当我写下答案时,我没有看到评论说它是整数.但是从结果来看,我仍然认为`startBits`不是整数,否则输出没有意义. (3认同)