存储不断访问的数据的最佳方式
Best way to store data that's constantly being accessed
到目前为止,我一直在使用结构来存储数据,然后将这些结构放入 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;
这是存储不断被访问且有时被修改的数据的最佳方法吗?这很小,但哈希中不会只有一个键。
来自您发布的代码:
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)
)
对于经常访问的数据 - 在速度方面没有什么能比得上它。
当然,这个解决方案是有效的,如果你可以使用整数作为你的 "keys",但是当涉及到像这样的操作时,即使 QHash
也会引入显着的开销。
到目前为止,我一直在使用结构来存储数据,然后将这些结构放入 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;
这是存储不断被访问且有时被修改的数据的最佳方法吗?这很小,但哈希中不会只有一个键。
来自您发布的代码:
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)
)
对于经常访问的数据 - 在速度方面没有什么能比得上它。
当然,这个解决方案是有效的,如果你可以使用整数作为你的 "keys",但是当涉及到像这样的操作时,即使 QHash
也会引入显着的开销。