Salve a tutti, anche non avendo ricevuto alcuna risposta volevo far partecipe il forum della soluzione che ho trovato: creare una classe container personalizzata, basata su una lista di pair (stringa, tempo) che però implementa tutto esattamente come una mappa: ovvero mantenendo tutte le stringhe uniche.
Facendo in questo modo ho implementato vari metodi per accedere/ modificare tutti i valori, più altri metodi comodi come deltaTime(const QString fromKey, const QString toKey) che mi da in output la differenza di tempo fra due elementi, cercandoli per chiave, oppure (ovviamente) le due funzioni di sort che a mia scelta ordinano la lista per stringa o per tempo.
Posto il codice, nel caso qualcosa di simile dovesse servire a qualche altro utente.
Inserisco solo l'header per far capire come ho impostato il tutto, i metodi sono poi di facile implementazione, una volta avutaml'idea ho scritto tutto in un quarto d'ora circa.
PairTimeList.h
codice:
#ifndef PAIRTIMELIST_H
#define PAIRTIMELIST_H
#include <QList>
#include <QString>
#include <QStringList>
#include <QTime>
#include <QPair>
class PairTimeList
{
public:
PairTimeList();
PairTimeList( QList< QPair<QString, QTime> > list);
bool contains(const QString key) const;
bool contains(const QPair<QString, QTime> pair) const;
bool insert(const QString str, const QTime t);
bool insert(const QPair<QString, QTime> pair);
bool erase(const QString key);
bool erase(const QPair<QString, QTime> pair);
bool erase(int position);
void clear();
void removeFirst();
void removeLast();
bool replace(int position, const QPair<QString, QTime> newpair);
bool replace(const QString key, const QTime newTime);
int position(const QString key) const; //torna -1se la stringa non è presente
QPair<QString, QTime> data(int position) const;
const QPair<QString, QTime> at(int position) const;
QTime time(const QString key) const; //torna il tempo associato a quella stringa
QList<QTime> times() const;
QStringList keys();
QStringList keys(const QTime value); //torna tutte le stringe associate a un tempo =value
QStringList keysBetween(const QTime fromTime, const QTime toTime);
const QList< QPair<QString, QTime> > sort_byTime() ; //BubbleSort
const QList< QPair<QString, QTime> > sort_byStrings(); //BubbleSort
const QList< QPair<QString, QTime> > getList() const ;
QString print();
int size() const;
void setTime(int position, QTime t);
void setTime(int position, int h, int min, int sec=0, int msec=0);
void setTime(const QString key, QTime t);
void setTime(const QString key, int h, int min, int sec=0, int msec=0);
void addSec(int position, int sectoAdd);
void addSec(const QString key, int sectoAdd);
void addMsec(int position, int msecToAdd);
void addMsec(const QString key, int msecToAdd);
QTime deltaTime(int from1, int to2);
QTime deltaTime(const QString fromKey, const QString toKey);
int msecBetween(int position1, int position2);
int msecBetween(const QString key1, QString key2);
int secBetween(int position1, int position2);
int secBetween(const QString key1, QString key2);
private:
QList< QPair<QString, QTime> > mylist;
};
#endif // PAIRTIMELIST_H
Have fun!
Ps: non posso attuare modifiche. Vorrei chiedre ai moderatori di modificare il titolo di questo post con qualcosa di più appropriato, e soprattutto semanticamente più corretto come
"Metodi per ordinare coppie di valori" (o simili)