QMap在是Qt中的一个容器类,组建数据的映射关系时经常用到,本文介绍常用的遍历方法,具体请看下面的代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <QMap>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();
void initView();
void initData();
void initConnect();
public slots:
void slotBeforeToAfterTraversal();//从前向后遍历
void slotAfterToBeforeTraversal();//从后向前遍历
void slotBeforeToAfterConstTraversal();//const对象遍历
private:
Ui::MainWindow *ui;
QMap<int, QString> m_mapStudent;
};
#endif // MAINWINDOW_H
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
initView();
initData();
initConnect();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initView()
{
m_mapStudent.clear();
}
void MainWindow::initData()
{
m_mapStudent.insert(5001, "Tom");
m_mapStudent.insert(5002, "Camel");
m_mapStudent.insert(5003, "Sky");
m_mapStudent.insert(5004, "White");
m_mapStudent.insert(5005, "Joe");
}
void MainWindow::initConnect()
{
connect(ui->pushButton_beforeToAfterTraversal, &QPushButton::clicked, this, &MainWindow::slotBeforeToAfterTraversal);
connect(ui->pushButton_afterToBeforeTraversal, &QPushButton::clicked, this, &MainWindow::slotAfterToBeforeTraversal);
connect(ui->pushButton_beforeToAfterConstTraversal, &QPushButton::clicked, this, &MainWindow::slotBeforeToAfterConstTraversal);
}
//从前向后遍历
void MainWindow::slotBeforeToAfterTraversal()
{
QMap<int, QString>::Iterator iter;
for(iter = m_mapStudent.begin(); iter != m_mapStudent.end(); ++iter)
{
qDebug()<< "for ==number==" << iter.key() << " name==" << iter.value();
}
QMap<int, QString>::Iterator iter2 = m_mapStudent.begin();
while (iter2 != m_mapStudent.end())
{
qDebug()<< "while =number==" << iter2.key() << " name==" << iter2.value();
++iter2;
}
qDebug() << "\n";
}
//从后向前遍历
void MainWindow::slotAfterToBeforeTraversal()
{
QMap<int, QString>::Iterator iter;
for(iter = --m_mapStudent.end(); iter != --m_mapStudent.begin(); --iter)
{
qDebug()<< "for ==number==" << iter.key() << " name==" << iter.value();
}
QMap<int, QString>::Iterator iter2 = --m_mapStudent.end();
while (iter2 != --m_mapStudent.begin())
{
qDebug()<< "while =number==" << iter2.key() << " name==" << iter2.value();
--iter2;
}
qDebug() << "\n";
}
//const对象遍历
void MainWindow::slotBeforeToAfterConstTraversal()
{
QMap<int, QString>::const_iterator iter;
for(iter = m_mapStudent.cbegin(); iter != m_mapStudent.cend(); ++iter)
{
qDebug()<< "for ==number==" << iter.key() << " name==" << iter.value();
}
QMap<int, QString>::const_iterator iter2 = m_mapStudent.cbegin();
while (iter2 != m_mapStudent.cend())
{
qDebug()<< "while =number==" << iter2.key() << " name==" << iter2.value();
++iter2;
}
qDebug() << "\n";
}