std::sort()學習(1)

從昨天是我第一次在codewars上刷題。今天早上又上codewars,碰上一個排序的題目,感到這是自己需要加強的地方,所以開始學習sort的用法。

sort(begin, end, cmp)函數處理的範圍從begin開始,到end結束。但是不包括end。下面的截圖來自http://www.cplusplus.com/reference/algorithm/sort/ 。注意, 紅線表明了sort處理的數組範圍是半開半閉區間。cmp是排序使用的函數。在下面的例子裏,greater<>()函數將結果升序排列,less<>()將函數降序排列。

下面的代碼展示的是利用sort函數來排列整型數組。

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <algorithm>
#include <functional>

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

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_BtnAsd_clicked()
{
    int arr[10] = {0}, iSize = 0;
    QString qstrInput = ui->lineEdit->text();
    QStringList qstrlst = qstrInput.split(QString(","));
    foreach(QString qstrItem, qstrlst)
    {
        int iVal = qstrItem.toInt();
        arr[iSize++] = iVal;
    }

    QStringList qstrRet;
    std::sort(arr, arr+ iSize, std::less<int>());
    for(int k = 0; k < iSize; k++)
    {
        qstrRet.append(QString().setNum(arr[k]));
    }

    ui->lineEdit_2->setText(qstrRet.join(","));
}

void MainWindow::on_BtnDsd_clicked()
{
    int arr[10] = {0}, iSize = 0;
    QString qstrInput = ui->lineEdit->text();
    QStringList qstrlst = qstrInput.split(QString(","));
    foreach(QString qstrItem, qstrlst)
    {
        int iVal = qstrItem.toInt();
        arr[iSize++] = iVal;
    }

    QStringList qstrRet;
    std::sort(arr, arr+ iSize, std::greater<int>());
    for(int k = 0; k < iSize; k++)
    {
        qstrRet.append(QString().setNum(arr[k]));
    }

    ui->lineEdit_2->setText(qstrRet.join(","));
}

效果:

被排序的數據也可以是一個vector,見下面的代碼:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <algorithm>
#include <functional>
#include <vector>

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

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_BtnAsd_clicked()
{
    int arr[10] = {0}, iSize = 0;
    std::vector<int> vec;
    QString qstrInput = ui->lineEdit->text();
    QStringList qstrlst = qstrInput.split(QString(","));
    foreach(QString qstrItem, qstrlst)
    {
        int iVal = qstrItem.toInt();
        vec.push_back(iVal);
        //arr[iSize++] = iVal;
    }

    QStringList qstrRet;
    //std::sort(arr, arr+ iSize, std::less<int>());
    std::sort(vec.begin(), vec.end(), std::less<int>());
    for(int k = 0; k < vec.size(); k++)
    {
        //qstrRet.append(QString().setNum(arr[k]));
        qstrRet.append(QString().setNum(vec[k]));
    }

    ui->lineEdit_2->setText(qstrRet.join(","));
}

void MainWindow::on_BtnDsd_clicked()
{
    int arr[10] = {0}, iSize = 0;
    std::vector<int> vec;
    QString qstrInput = ui->lineEdit->text();
    QStringList qstrlst = qstrInput.split(QString(","));
    foreach(QString qstrItem, qstrlst)
    {
        int iVal = qstrItem.toInt();
        vec.push_back(iVal);
        //arr[iSize++] = iVal;
    }

    QStringList qstrRet;
    std::sort(vec.begin(), vec.end(), std::greater<int>());
    for(int k = 0; k < vec.size(); k++)
    {
        //qstrRet.append(QString().setNum(arr[k]));
        qstrRet.append(QString().setNum(vec[k]));
    }

    ui->lineEdit_2->setText(qstrRet.join(","));
}

效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章