求一种数据结构,能快速完成元素的增删改查且占内存少

zhousitiaoda 2017-10-19 05:07:00
有几百万个结构体对象,按排序规则依次将其指针放入一个容器中(有序),在保证快速完成增删改查操作的前提下(能达到O(logn)最好),另外内存要尽可能的小。
目前试过的,数组删除太慢,链表查找太慢,map内存占用大。B树/B+树内存还是稍微有点多,
...全文
565 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Acuity. 2017-10-24
  • 打赏
  • 举报
回复
坐等楼主的分享解决办法,打破常规,就是造轮子了。
走好每一步 2017-10-21
  • 打赏
  • 举报
回复
想速度快,估计都得自己写吧。
zhousitiaoda 2017-10-21
  • 打赏
  • 举报
回复
接上面,everything额外支持一种排序,带来的内存开销是接近每个文件多8字节,如果有100W文件,实际增加的内存=1000000*8/1024/1024=7.6MB。64位下光一个指针就8字节,更别提容器的实现了。 如果文件结构体都是在内存池里分配,都是连续的内存,那指针可以用偏移量(4字节足够了)代替,但看了下内存池的实现,大多数都是类似STL里内存池的实现,链表的方式,内存不是连续的。
zhousitiaoda 2017-10-21
  • 打赏
  • 举报
回复
引用 2 楼 sdghchj 的回复:
std::unordered_map
要保持容器内元素有序
引用 3 楼 mLee79 的回复:
B/B+ 不需要把所有的索引都载入内存, 就载入前几级索引不需要啥内存 。 现在的机器手机都6G内存了, 几百万, 几千万个节点就不是个事啊, 难道你程序跑单片机上 ....
运行在PC上,我想在不影响性能的前提下尽可能地让内存小。 补充下实际场景。有一个文件搜索程序,文件结构体有几个成员

struct fileinfo
{
  int key;// 唯一
  int filesize;// 文件大小
 time modifytime; // 修改时间
  char* name;// 文件名
}FileInfo,*PFileInfo
所有结构体存储在一个hashmap<key,PFileInfo>里,现在要支持按文件大小/修改时间/文件名排序搜索(只能从有序队列里搜,否则搜出来再排序太慢),于是准备添加几个容器ABC,分别按大小/修改时间/文件名有序存储(存储的肯定都是指针),现在想挑选一种容器,使得这个容器可以快速支持增删改查,并且内存能尽可能低。 其实最合适的容器可能是boost的multi_index_container,但内存还是不够理想。对比下everything,64位下支持一种排序才平均每个文件增加8字节的开销左右。
大尾巴猫 2017-10-20
  • 打赏
  • 举报
回复
时间换空间,或者空间换时间,本来就是妥协。 你要注意的是在数据结构中存放对象本体,还是存放对象的指针。 如果有多个地方需要用到对象,存指针是不错的选择,避免对象本体多个复制体。
赵4老师 2017-10-20
  • 打赏
  • 举报
回复
上量子计算机!
csulizhang 2017-10-20
  • 打赏
  • 举报
回复
即使是宙斯跳大,也不能完美的帮你解决这个问题
自信男孩 2017-10-20
  • 打赏
  • 举报
回复
数组形式和链表形式各有千秋吧,数组形式查找效率会高,链表删除会效率高点;可以考虑采用两种形式的结合呢~ B/B+也是链表的另一种形式; 考虑内存,数据对象是固定的,那么内存的大小基本上固定,如果用链表,会考虑占用一个指针用于存放下一个节点的地址;
mLee79 2017-10-20
  • 打赏
  • 举报
回复
B/B+ 不需要把所有的索引都载入内存, 就载入前几级索引不需要啥内存 。 现在的机器手机都6G内存了, 几百万, 几千万个节点就不是个事啊, 难道你程序跑单片机上 ....
sdghchj 2017-10-20
  • 打赏
  • 举报
回复
std::unordered_map

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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