從昨天是我第一次在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(","));
}
效果: