【问题标题】:std::vector sort is not workingstd::vector 排序不起作用
【发布时间】:2016-12-08 16:40:54
【问题描述】:

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

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

【问题讨论】:

  • startBits的类型是什么?
  • 这是什么“foreach”?我认为除了 c++、排序、向量、stl 之外还有其他东西。请标记正确的
  • @mash :感谢您的回复。 startBit 是一个整数。
  • @HumamHelfawi 那是 Qt
  • @Wagmare 你确定startBits 是一个整数吗? -.-

标签: c++ sorting vector stl


【解决方案1】:

您的排序结果按字符顺序排列,例如“2”

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

所以你的排序是有效的,但是以另一种方式。

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

【讨论】:

  • 但 OP 声明 startBits 是一个整数。
  • 元素按字典顺序排序,让您知道 :)
  • 嗯......当我写答案时,我没有看到 cmets 说它是整数。但是从结果来看,我还是觉得startBits不是整数,否则输出没有意义。
  • 是的,你是对的,我在声明 qstring 而不是 int 时犯了一个错误。
猜你喜欢
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 2010-09-19
  • 2014-05-27
  • 2011-10-29
  • 1970-01-01
  • 2013-02-08
  • 1970-01-01
相关资源
最近更新 更多