gpt4 book ai didi

c++ - 将内存中的树结构表示为缓存的最佳方法是什么?

转载 作者:行者123 更新时间:2023-11-28 08:26:09 25 4
gpt4 key购买 nike

大家好我有带节点的树。节点由 TCP API 请求响应值构建。为了减少请求,我想在缓存结构中表示树,每次调用 TCP 请求时它将首先检查缓存。最好的方法是什么?我指的是树缓存部分,在我的例子中,我使用的是 Qt 和 C++。

最佳答案

您可以使用 std:map<TCPRequest, TCPResponse>为了达成这个。您的请求和响应可以是字符串,在这种情况下可能会减少到 std:map<std::string, std::string> .如果没有,您需要确保您的 TCPRequest类支持 operator<允许对 map 进行二进制搜索。

你的代码可能看起来像

#include <map>

std::map<TCPRequest, TCPResponse> responseCache;
typedef std::map<TCPRequest, TCPResponse>::const_iterator cacheCIterator;

TCPRequest nextRequest;
cacheCIterator iter = responseCache.find(nextRequest);
if (iter != responseCache.end())
{
return iter->second; // found cached response
}
else
{
// issue the request
TCPResponse response = issueRequest(nextRequest);

//save the response
responseCache[nextRequest] = response;
return response;
}

您还需要考虑缓存过期,除非您的流量小到可以缓存所有响应。在某些时候你想 erase() TCPResponse对象,可能是通过保留一个单独的结构来告诉您最近最少使用的响应 (LRU)。

考虑到这一点,可以在您的 int 中使用某种唯一标识符(单调递增的 TCPResponse 会起作用)对象作为完整对象的代理,允许您使用 int 识别缓存和 LRU 响应s 而不是完整的类实例。你还需要完整的 TCPRequest比较以确保缓存按预期工作。

关于c++ - 将内存中的树结构表示为缓存的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4004488/

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