PDA

View Full Version : QMapIterator



Arend
17th March 2013, 09:07
Hello,

I have defined a pointer to a QMap<QString,QVector<int> > *mapSerie_, see the code below.
Now I want to iterate over the map: QMapIterator<QString,QVector<int> > i = mapSerie_->begin();
But this gives an error.
How to define such a iterator?

Regards,
Arend


The header:


#include <QMainWindow>
#include <QVector>
#include <QMap>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
private slots:
QMap<QString,QVector<int> > *mapSerie();
private:
QMap<QString,QVector<int> > *mapSerie_;
};


The source:


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "QMap"
#include <QVector>
#include <QMapIterator>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
mapSerie_ = new QMap<QString,QVector<int> >;

QString name="One";
QVector<int> serie;

for(size_t i=0;i<10;++i)
serie.push_back(i);

mapSerie_->insert(name,serie);
QMapIterator<QString,QVector<int> > i = mapSerie_->begin();
}

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

QMap<QString,QVector<int> > *MainWindow::mapSerie()
{
return mapSerie_;
}

anda_skoa
17th March 2013, 15:13
QMap::begin() returns an STL (standard template library) style iterator, QMapIterator is a Java-style iterator and is created by passing the container to its constructor.

So you can either to


QMapIterator<QString, QVector<int> > i(*mapSerie_);

or


QMap<QString, QVector<int> >::const_iterator i = mapSerie->begin();


Cheers,
_

Arend
17th March 2013, 17:03
Thanks, the first one works.
Arend