到目前为止,我一直在使用结构来存储数据,然后将这些结构放在QHash中。
struct Event {
QString languageCode;
QString message;
//QMap<QString, QString> messages; Ignore it. Won't be using it.
QString prop;
qint64 dateSec;
qint64 dateUsec;
qint64 startDateSec;
qint64 startDateUsec;
};
QHash<QString, Event> eventList;
Event event;
event.languageCode = "en";
event.message = "";
event.prop = "www.google.com";
event.dateSec = 1429554399;
event.dateUsec = 0;
event.startDateSec = 0;
event.startDateUsec = 0;
eventList.insert("ab1443c323956", event);
// Test...
qDebug() << eventList.value("ab1443c323956").prop;
这是存储数据的最佳方法,这些数据经常被访问并且有时会被修改吗?这个很小但是在哈希中只有一把钥匙。
答案 0 :(得分:1)
从您发布的代码:
eventList.insert("ab1443c323956", event);
// Test...
qDebug() << eventList.value("ab1443c323956").prop;
我假设您要么硬编码事件的标识符(现在是QString类型),要么将它们保存在某处。在这种情况下,我会使用QVector:
extern int ab1443c323956_index;
QVector<Event> eventList;
Event event;
//fill data
eventList.push_back(event);
ab1443c323956_index = eventList.size() - 1;
// Test...
qDebug() << eventList[ab1443c323956_index].prop;
现在,由于您总是附加事件(QVector::push_back()
等同于QVector::append()
),因此您有以下复杂性:
O(1)
)O(1)
)对于经常被访问的数据 - 在速度方面没有任何东西可以胜过这一点。
当然,这个解决方案是有效的,如果你可以使用整数作为&#34;键&#34;,但是当涉及到这样的操作时,即使QHash
也会带来很大的开销。