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"
我必须根据成员起始位对列表中的结构进行排序,但即使是正确的升序向量也没有正确排序.
您的排序结果是字符序列,例如"2"<"24"<"3".
我相信你的"startBits"就像是std::string,而你sortingSignals()正在比较string而不是价值观.
所以你的排序正在发挥作用,但另一方面.
要真正获得所需的结果,您可以转换string为int并比较int值sortingSignals()