分享好友 最新动态首页 最新动态分类 切换频道
boost::multi_index 提供一种千人在线即时排行榜的设计思路
2024-12-26 22:02

原文地址:

boost::multi_index 提供一种千人在线即时排行榜的设计思路

http://www.limerence2017.com/2019/06/23/cpp01/

 

如果用快速排序实现,需要定义四种比较规则,而且qsort排序需要一段连续空间,如数组或者vector,为节约内存,每个元素存储玩家基本信息的指针。之后为每种排行类型定义单独的比较规则。代码如下

 

这么做有几个坏处
1 每个排行都要开辟一段连续的序列,即使存储指针也会造成空间的浪费。
2 qsort适合中小数量排序,当人数上千或万以上会造成瓶颈。但是可以通过插入排序优化。
下面提出一种新的结构来处理排序,boost::multi_index 实现了多索引结构,支持按照多个键值排序,可以极大减轻压力。

multi_index 是boost库提出的多索引结构表,可以设定多个主键进行排序,如战力,充值等等,但是必须要有一个唯一主键,我们将player的id设为唯一主键。
为了方便输出我们先完善下PlayerInfo类,重载输出运算符

 

由于multi_index 各主键排序需要设置比较规则,默认是从小到大,int类型可以用greater, less等。
greater从大到小, less从小到大,也可以自己实现仿函数。

 

定义operator()一定要加上const,因为没有修改参数数据。

基于playerinfo实现multi_index表如下

 

by_id, by_power等都是标签,只需要声明一个结构体,然后tag<标签名>放到索引里。当然可以不带tag,带tag是为了之后获取方便。
powerOperator是定义的战力比较规则,greater定义的充值金额比较规则,是从大到小排序。

multi_index表在数据插入的时候就根据各个主键排序规则进行排序,所以只需要按照主键取出,获得序列就是排好序的数据。

我们先按照id获取,然后打印输出结果

 

结果如下,可以看出是按照id从小到大排序输出的。

 

那我们按照战力获取

 

结果能看出是按照战力从大到小输出

 

删除元素如果是根据唯一主键删除,可以直接删除,如果是非唯一主键,需要查出所有记录并删除。
删除唯一主键为2的玩家

 

结果

 

插入一条战力重复的数据,并且遍历删除所有战力为1231的玩家

 

结果

 

lower_bound 获取的是战力为1231的玩家迭代器的起始值,upper_bound获取的是战力为1231的玩家的最大值的下一个元素。

修改数据可以用replace,也可以用modify
replace 失败不会删除条目,但是二次copy造成效率低下
modify失败会删除对应条目,容易暴力误删除,但是效率高
replace 找到战力为19999的玩家,并且替换为新的数据。

 

下面用modify修改数据

 

最新文章
私信卡片工具一键跳转微信加好友如何实现?
您是否常常遭遇这样的困扰:想要引导平台粉丝或潜在客户快速添加微信好友,却面临重重阻碍?繁琐的手动操作、复杂的引导流程,让许多宝贵的人脉资源和商业机会从指尖溜走。别担心,私信卡片工具一键跳转微信加好友功能的出现,将为您彻底扭
Sora开始收费了,其他人怎么办?
《中国经营报》记者注意到,Sora最早于今年2月公开亮相,一度惊艳世界,但试用者局限于艺术家、动画师、电影制作人等专业人士。在此次OpenAI宣布开放之后,Sora官网注册人数激增导致页面无法正常使用。Sora产品负责人Rohan Sahai对此回应称
视频压缩在线工具,推荐6个实用工具
有时候视频文件体积太大不仅会占用设备的存储空间,降低设备的运行效率,在网络状况不佳的情况下,还会导致视频播放卡顿,十分影响用户的视频观看体验。对于这种情况,很多用户会选择压缩视频大小。那么有哪些比较好用的视频压缩在线工具或
西安市建设工程信息网平台/福州seo技巧培训
STL中,要删除容器内的一个元素,其方法会随着容器类型的不同而不同。  例如,对于STL容器c,c包含int类型的元素,现在需要删除c中等于2014的元素。 序列容器即具有连续内存的容器,如vector,
SEO关键词首页排名
SEO关键词首页排名 为什么选择我们的百度关键词排名优化服务?精准分析,量身定制优化策略我们深入分析你的行业和目标受众,帮助你选择最合适的关键词,并制定个性化的优化方案,确保你的网页能够排名靠前,吸引更多的潜在客户。高效优化,
搜索引擎营销文案写作技巧
搜索引擎营销文案写作技巧  我们一直提倡用SEO 的思想去写文章,即合理的将关键词分布在文章中。下面是YJBYS小编整理的搜索引擎营销文案写作技巧,希望对你有帮助!  1.标题醒目  标题是搜索引擎营销文案写作至关重要的地方,必须简单
国内可以24小时挂机的云电脑有哪些?
随着云计算技术的发展,越来越多的人需要使用云计算机。云计算机可以帮助我们随时随地访问桌面环境和应用程序,而不必担心数据丢失和缺乏计算能力。本文将为大家介绍几款可以24小时挂机的国产云电脑主机。1.阿里云阿里云是中国最大的云计算
澄迈爱采购代运营费用
百度爱采购服务商浅谈:上传产品图片需要注意的地方 百度爱采购服务商浅谈:上传产品图片需要注意的地方,不同的商品质量影响着商品的排序程度,主要因素有类目优化程度、图片质量、参数丰富度、时间、地域等,下面来了解下百度爱采购上传
解决方案:如何确保网站被百度收录并提升网站内容质量与优化技术
确保网站被百度收录,对网站的进步极为关键。这表示网站能够吸引更多访客,获得更广泛的关注。网站内容质量网站内容必须保证高水准和原创性。若是内容只是简单的抄袭和拼凑,百度是不会给予关注的。内容要有实际价值,比如提供实用的信息。
相关文章
推荐文章
发表评论
0评