std::矢量排序不起作用

std::vector sort is not working

本文关键字:不起作用 排序 std      更新时间:2023-10-16

我试图对包含向量的结构进行排序。我必须根据结构中的成员进行排序。排序我使用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;
        }
    }

排序函数sortingSignals()是

bool sortingSignals(const LDFSignalsData &first, const LDFSignalsData &second)
 {
    if (first.startBits < second.startBits)
        return true;
      else
        return false;
 }

但是输出没有如所期望的那样到来。这是我的日志信息

信号动作数据:"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"

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

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

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

所以你的这种方式是有效的,但在另一方面。

为了真正获得您想要的结果,您可以将string转换为int,并比较sortingSignals() 中的int