需求:

客户端收到游戏中的所有联盟列表,现在需要按联盟的属性比如lv来进行排序。

数据存储:

每个联盟数据是一个对象,所有的联盟列表存在一个vector容器里面。

老的解决方法:

冒泡排序方法算法

新的方法:

参考http://blog.csdn.net/aastoneaa/article/details/8471722,总结使用C++自带的std::sort函数。

详细方法:

军团对象,定义了军团的各种简单属性

class AllianceData
{
public:
AllianceData(); ~AllianceData(); std::string uid;//唯一key std::string aname;//名称 nv_uint32 num;//成员总数 nv_uint32 alv;//等级
};

定义用来比较的函数对象,我们命名为CompHelper.h

#ifndef _CompHelper_H_
#define _CompHelper_H_ #include "AllianceData.h"
//升序排列
class CompLess
{
public:
bool operator ()(const AllianceData& pstItem1, const AllianceData pstItem2)
{
return pstItem1.alv < pstItem2.alv;
}
};
//降序排列
class CompGreater
{
public:
bool operator ()(const AllianceData& pstItem1, const AllianceData& pstItem2)
{
return pstItem1.alv > pstItem2.alv;
} }; #endif // _CompHelper_H_

我们调用时这样:

    std::vector<AllianceData> v_a;
AllianceData m;
m.uid = "1";
m.aname ="name1";
m.alv = 6;
v_a.push_back(m);
m.uid = "1";
m.aname ="name1";
m.alv = 6;
v_a.push_back(m);
m.uid = "1";
m.aname ="name1";
m.alv = 6;
v_a.push_back(m);
sort(v_a.begin(),v_a.end(),CompGreater());//降序排列

假如你又要对已有的装备排序,那么可直接在CompHelper.h 中重载()方法即可,比如:

#ifndef _CompHeloer_H_
#define _CompHeloer_H_ #include "AllianceData.h"
#include "ArmyData.h"
#include "EquipmentData.h" //升序排列
class CompLess
{
public:
bool operator ()(const AllianceData& pstItem1, const AllianceData pstItem2)
{
return pstItem1.alv < pstItem2.alv;
}
bool operator ()(const CommanderData& pstItem1, const CommanderData pstItem2)
{
return pstItem1.lv < pstItem2.lv;
}
bool operator ()(const EquipmentData& pstItem1, const EquipmentData pstItem2)
{
return pstItem1.eid < pstItem2.eid;
}
};
//降序排列
class CompGreater
{
public:
bool operator ()(const AllianceData& pstItem1, const AllianceData& pstItem2)
{
return pstItem1.alv > pstItem2.alv;
}
bool operator ()(const CommanderData& pstItem1, const CommanderData pstItem2)
{
return pstItem1.lv > pstItem2.lv;
}
bool operator ()(const EquipmentData& pstItem1, const EquipmentData pstItem2)
{
return pstItem1.eid > pstItem2.eid;
}
}; #endif // _CompHeloer_H_

总结:

排序的方法有很多中,可参考http://blog.csdn.net/aastoneaa/article/details/8471722

通过参考这个,我个人觉得函数对象的方法使用最方便,维护量少,而且统一。

最新文章

  1. T-SQL:毕业生出门需知系列(八)
  2. SQLServer中的事务与锁
  3. cocos进阶教程(2)多分辨率支持策略和原理
  4. 实战Django:官方实例Part6
  5. Sliding Window Maximum 解答
  6. js 获取月份 格式yy-mm-dd
  7. 配置 php-fpm 监听的socket
  8. hdu 5274 Dylans loves tree
  9. 【环套树+树形dp】Bzoj1040 [ZJOI2008] 骑士
  10. ==和equals的比较方式
  11. linux学习笔记整理(五)
  12. Pyhton对象解释
  13. Wowza 相关
  14. Logistic 最大熵 朴素贝叶斯 HMM MEMM CRF 几个模型的总结
  15. Problem E: 平面上的点——Point类 (V)
  16. 583. Delete Operation for Two Strings
  17. [luogu2144][bzoj1002][FJOI2007]轮状病毒【高精度+斐波那契数列+基尔霍夫矩阵】
  18. js学习、备忘
  19. 八幅漫画理解使用 JSON Web Token 设计单点登录系统
  20. HTML标签(持续更新)

热门文章

  1. sping框架(3)— 使用spring容器
  2. mac mysql连接报错ERROR 1045 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES)
  3. IE8 兼容CSS3 使用 PIE.htc
  4. 【EF】Entity Framework Core 2.0 特性介绍和使用指南
  5. 【bzoj1370】[Baltic2003]Gang团伙 并查集
  6. 浅析Nim游戏(洛谷P2197)
  7. hadoop 编码实现文件传输、查看等基本文件控制
  8. [洛谷P4345][SHOI2015]超能粒子炮&#183;改
  9. [NOIP2017]逛公园 最短路图 拓扑序DP
  10. BZOJ5314:[JSOI2018]潜入行动——题解