본문 바로가기
프로그래밍/기타

[Qt] QList에 있는 구조체 정렬하는 방법 (Sort, Struct)

by GhostWeb 2021. 5. 15.
반응형

 

QList안에 있는 구조체 아이템의 항목을 기준으로 아이템을 정렬할 수 있어요.

 

○ 헤더

#include <QDebug>	// qDebug() 출력을 위해 추가

struct People
{
    QString Name;
    int Age;
};

 void ShowList(QList<People> list);	// QList 내용 출력 용도

 

○ 메인

void MainWindow::ShowList(QList<People> list)
{
    foreach (People people, list)
    {
        qDebug() << QString("Name : %1 / Age : %2").arg(people.Name).arg(people.Age);
    }
}

// 이름 정렬
bool NameLessThan(const People &s1, const People &s2)
{
    return s1.Name.toLower() < s2.Name.toLower();
}

// 나이 정렬
bool AgeLessThan(const People &s1, const People &s2)
{
    return s1.Age < s2.Age;
}

// Main
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // 사람 정보 추가
    QList<People> peopleList;
    peopleList.append(People {"Ghi", 10});
    peopleList.append(People {"Def", 30});
    peopleList.append(People {"Abc", 20});

    qDebug("People List");
    ShowList(peopleList);

    // 이름 정렬
    std::sort(peopleList.begin(), peopleList.end(), NameLessThan);
    qDebug("Sort - Name");
    ShowList(peopleList);

    // 나이 정렬
    std::sort(peopleList.begin(), peopleList.end(), AgeLessThan);
    qDebug("Sort - Age");
    ShowList(peopleList);
}

 

○ 실행 결과

Debugging starts
People List
"Name : Ghi / Age : 10"
"Name : Def / Age : 30"
"Name : Abc / Age : 20"
Sort - Name
"Name : Abc / Age : 20"
"Name : Def / Age : 30"
"Name : Ghi / Age : 10"
Sort - Age
"Name : Ghi / Age : 10"
"Name : Abc / Age : 20"
"Name : Def / Age : 30"
반응형