分享好友 最新动态首页 最新动态分类 切换频道
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修改数据

 

最新文章
引流推广的含义及重要性
引流推广是指通过各种手段和渠道,吸引更多的目标受众前来关注、了解并参与到某一产品、服务或内容中来。在当今竞争激烈的市场环境下,引流推广已经成为企业营销策略中不可或缺的一部分。引流推广包括多种形式,比如内容营销、社交媒体营销
重装一台轻量型云主机
errorCode描述Openapi.PatternCheck.NotValid请求参数无效Ecs.RegionInfo.Empty查询资源池信息为空或资源池不存在,请确认资源池ID是否有效Ecs.RegionInfo.AccessFailed查询资源池失败,请重试。如果多次尝试失败,请提交工单Ecs.RegionInf
充电桩明年工作计划范文范文(全文)
充电桩明年工作计划范文 第一篇充电桩管理制度一、驾驶员对于充电桩的职责一、驾驶员在结束业务后需将充电枪插入车辆插电孔,自行或者通知充电工进行充电,严禁不插充电枪就离开车辆。二、驾驶员在操作充电桩的时候做到“三看一听”,第一
科技圈震动!传奇人物,被爆自杀身亡!
今天,一则不幸的消息在科技圈刷屏。据最新报道,26岁的美国OpenAI公司前研究员苏奇尔·巴拉吉近期被发现在他位于旧金山的公寓内自杀身亡。旧金山首席法医办公室执行主任David Serrano Sewell周五在一封电子邮件中证实了这一消息,并称死因
百度seo优化怎么做关键词
在进行SEO优化时,关键词的选择和布局是重要的一步。首先,我们需要通过市场调研和关键词分析工具来确定目标受众可能使用的搜索词汇。这些关键词应当与网站内容紧密相关,同时具备一定的搜索量和竞争度。百度seo优化怎么做关键词一旦确定了
针对不同产品的SEO关键词推广策略案例分析【实例说明】
SEO关键词与客户需求之间存在紧密的逻辑关系,理解并利用这种关系是实施成功的搜索引擎优化策略的关键。关键词反映客户需求: 关键词通常是客户在搜索引擎中输入的词或短语,这些关键词反映了客户的需求和意图。客户使用搜索引擎来寻找答案
魅族新款手机上市,外观性能评价,你们认为怎么样
最近两个月各大手机厂商新款真的层出不穷,小编最近写手机文章都眼花缭乱,在这里小编给大家专门说一些那些手机品牌目前新款手机值得期待,对于想换手机的用户有可以专门去搜索看看,首先有华为,小米,一加,三星,这四个品牌的新款手机适
微信营销外链策略:打造强劲的外链帝国282
在竞争激烈的微商市场中,一个强大的网站外链策略至关重要。外链能帮助您提升网站排名,增加流量,并建立品牌权威。本文将提供一个全面的网站外链规划师,指导您制定和执行有效的微信营销外链建设计划。外链规划确定您的目标受众是至关重要
黑湖小工单-机加工行业的生产管理痛点分析与解决
机加行业经常面临销售交期与生产周期不匹配的问题。生产计划排产时,有时已经超过订单交期,有时则无法满足生产周期要求,导致客户满意度下降。目前,许多机加企业的生产排程仍依赖人为经验,缺乏科学的计划和调度系统。这导致计划异常频发
聚智谋实,兼收并蓄,全球顶尖学者共议晚期METex14跳突非小细胞肺癌治疗策略进展
整理:肿瘤资讯来源:肿瘤资讯非小细胞肺癌(NSCLC)的精准治疗在过去十年间取得了飞速进展。随着基因组测序技术的持续进步和对肿瘤分子分型认知的不断深入,除了传统的EGFR突变、ALK融合等驱动基因外,MET 14号外显子跳跃突变(METex14跳
相关文章
推荐文章
发表评论
0评