gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 06:18:34 24 4
gpt4 key购买 nike

到目前为止,我一直在使用结构体来存储数据,然后将这些结构体放入 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()),您具有以下复杂性:

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

对于经常访问的数据 - 在速度方面没有什么比这更好的了。

当然,如果您可以使用整数作为“键”,这个解决方案是有效的,但是当涉及到像这样的操作时,即使是 QHash 也会引入显着的开销。

关于c++ - 存储不断访问的数据的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29754709/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com