我试图对包含结构的向量进行排序。我必须根据结构中的成员进行排序。排序我使用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;
我必须根据成员开始位对列表中的结构进行排序,但即使正确的升序向量也没有正确排序。
答案 0 :(得分:8)
您的排序结果是字符序列,例如“2”&lt; “24”&lt; “3”。
我相信您的“startBits”类似于std::string
,而您的sortingSignals()
正在比较string
而不是值。
所以你的排序正在发挥作用,但另一方面。
要真正得到您想要的结果,您可以将string
转换为int
并比较int
sortingSignals()
值