帮我参考一下是否可以选择set容器,还是有其他更合适的容器

szsz 2003-10-30 11:47:30
class T
{
char name[16];//关键字,set排序
double value;
....//其他
....
....

}


我现在的情况是进程A开辟了 T[n]的共享内存,并负责这段内存中的数据在全网其他机器上一致。进程B采集数据并将数据处理后写入T[n],进程C可以编辑T[n]中的数据(可能会修改顺序或插入记录),我的进程D负责定时将数据保存并写入数据库。

由于前后两次的数据改变比较少,我想只保存变化数据减少存储数据量(第一次是全数据,后面的是与前一次不同的数据)。
我想用set集合取出不相同的元素么有问题,但是要获得后一次的数据必须进行替代,是不是我先遍历查找相同的name ,假如找到则删除,然后再插入?
有其他好办法吗?我觉的我需要的是一个带集合功能的map
...全文
84 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
leyt 2003-11-01
  • 打赏
  • 举报
回复
up
szsz 2003-11-01
  • 打赏
  • 举报
回复
这工作模型已经没法改变了,这几个程序都已经完成了,现在正在要进行完善和维护.我要做的只是定时将内存库中的数据保存下来(一个数据断面).我刚学stl,据说set最适合进行集合的运算,我想知道我的这个结构如何自定义求异运算,能给个例子吗?
killme2008 2003-11-01
  • 打赏
  • 举报
回复
赞成 boxban(master-dreamer
讲的很棒
WildLife 2003-10-31
  • 打赏
  • 举报
回复
关注这个讨论,我是搞远动维护的
boxban 2003-10-31
  • 打赏
  • 举报
回复
我觉得你应该重新考虑整体工作模型。
建议取消共享内存方式,采用消息机制完成各个进程之间的通信,一方面可以降低进程间对共享内存访问的同步复杂度,另一方面实现起来也会更方便一些。
基本思路是:
A负责数据管理,B进程采集到新数据后,发消息(连同数据)给A;
A将新数据,同时通知D有新数据需要些到数据库;D收到消息(连同数据)将新数据写入数据库;
C编辑好数据后,发消息通知A;A更新本地存储,同时通知D更新数据库

这里面的主要问题是:C如何查找取得需要编辑的数据。如果是用户通过数据库访问完成,则上面的模型应该是适用的;否则,可能还需要共享内存,但仅限于A和C。

采用消息机制的好处是:A不必去检查那些数据发生了变化,而是有导致数据变化的进程直接通知它。
zhouqingyuan 2003-10-31
  • 打赏
  • 举报
回复
up
蝎子i软件 2003-10-31
  • 打赏
  • 举报
回复
我觉得找到相同的name,只需将新值赋给它就行了,不需要删除再插入吧?

可以用map<string, T>吧?其中string是name。如果能用int则效率可能更高些。

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧