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

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 也会引入显着的开销。