Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为记录数据选择合适的STL容器_C++_Stl - Fatal编程技术网

C++ 为记录数据选择合适的STL容器

C++ 为记录数据选择合适的STL容器,c++,stl,C++,Stl,我需要在我的客户机服务器应用程序中使用日志记录和筛选机制。其中,客户机可以根据特定参数请求日志数据 日志将MACID、日期和时间、命令类型和方向作为字段 服务器也可以根据这些参数筛选日志数据。 日志大小为10 mb,之后日志将从一开始覆盖消息 我的方法是将数据作为“内存中”记录到STL容器中的文件中,以便在客户端请求时,数据服务器将根据任何条件过滤日志数据 所以,这个过程是服务器将首先对向量上的特定条件进行排序,然后使用二进制搜索对其进行过滤 我计划使用vector作为内存日志记录数据的STL容

我需要在我的客户机服务器应用程序中使用日志记录和筛选机制。其中,客户机可以根据特定参数请求日志数据

日志将MACID、日期和时间、命令类型和方向作为字段

服务器也可以根据这些参数筛选日志数据。 日志大小为10 mb,之后日志将从一开始覆盖消息

我的方法是将数据作为“内存中”记录到STL容器中的文件中,以便在客户端请求时,数据服务器将根据任何条件过滤日志数据

所以,这个过程是服务器将首先对向量上的特定条件进行排序,然后使用二进制搜索对其进行过滤

我计划使用vector作为内存日志记录数据的STL容器

我有点困惑vector是否适合这种情况

因为矢量中的数据大小最大可达10 mb。
我的问题是vector是否足够应付这种情况?

我会选择一个双端队列。它就像一个向量,但你可以从两端添加/删除元素。

我首先声明,我将使用日志库,因为有很多,我向你保证它们会做得更好(例如)。如果您坚持自己这样做,向量是一种合适的机制,但您必须根据用户请求手动排序数据。另一个想法是使用sqllite,让它管理存储、排序和过滤数据

实际响应在很大程度上取决于使用模式和接口。如果您使用的是图形用户界面,那么可能已经有一个小部件在某种程度上实现了该功能(能够按不同的列排序,甚至过滤)。如果您真的想在UI之外实现它,那么它将取决于使用模式,用户会更想要一个特定的视图吗?她只需要过滤,还是也需要排序

如果在大多数情况下都会使用一个数据视图,并且您只需要显示几次不同的顺序,那么我会保留元素的
std::vector
std::deque
,并在需要时使用
remove\u copy\u进行过滤。如果需要不同的排序,我会复制并排序副本,以避免必须重新排序回基于时间的副本,以继续向日志中添加元素。如果应用程序不断推送数据,则需要使用新元素更新副本(或提供固定视图并定期重新运行操作),请小心


如果没有比其他视图更频繁出现的特定视图,或者如果您不想经历实现上述内容的痛苦,请看一看boost多索引容器。它们使用不同的条件保持相同数据的同步视图。在最后一种情况下,这可能是最有效的,即使在主流视图的一般情况下效率较低,也可能使事情变得更简单,因此仍然值得。我仍然不清楚,如果您已经登录到文件中,那么为什么还需要登录到
vector
?您的代码是否也需要读取
vector
?我需要在vector中存储日志信息,以便在用户根据上述参数请求日志数据时对其进行过滤。它的客户端-服务器程序,其中服务器记录数据,客户端请求数据。您是指log4cxx吗?log4cpp库似乎在2007年停止了开发。我记不起实际名称,但log4cxx是apache项目。我使用log4cxx,但仅用于记录文件中的信息。log4cxx是否支持筛选。在这种情况下,为什么要在开始时添加/删除元素?一旦达到10 mb大小,就需要删除元素。如果限制为0,则将删除最后添加的消息到达。事件在一端添加,在另一端删除。你可以用一个向量和一个指针来完成同样的事情,它告诉你在哪里覆盖旧的事件,但是deque只是为你做的。如果你真的想要这个自定义内存过滤,那么一定要。但我首先要检查来自已经编写的日志库的报告是否足够。也许你真的不需要保留这个缓存。