存储不断访问的数据的最佳方式

时间:2015-04-20 17:39:35

标签: c++ qt store updates

到目前为止,我一直在使用结构来存储数据,然后将这些结构放在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;

这是存储数据的最佳方法,这些数据经常被访问并且有时会被修改吗?这个很小但是在哈希中只有一把钥匙。

1 个答案:

答案 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()),因此您有以下复杂性:

  • 插入:常数摊销(Amort。O(1)
  • 索引查找:常量(O(1)

对于经常被访问的数据 - 在速度方面没有任何东西可以胜过这一点。

当然,这个解决方案是有效的,如果你可以使用整数作为&#34;键&#34;,但是当涉及到这样的操作时,即使QHash也会带来很大的开销。