C++ Vector 中自定义对象的排序
2024-08-28 16:00:06
需求:
客户端收到游戏中的所有联盟列表,现在需要按联盟的属性比如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。
通过参考这个,我个人觉得函数对象的方法使用最方便,维护量少,而且统一。
最新文章
- T-SQL:毕业生出门需知系列(八)
- SQLServer中的事务与锁
- cocos进阶教程(2)多分辨率支持策略和原理
- 实战Django:官方实例Part6
- Sliding Window Maximum 解答
- js 获取月份 格式yy-mm-dd
- 配置 php-fpm 监听的socket
- hdu 5274 Dylans loves tree
- 【环套树+树形dp】Bzoj1040 [ZJOI2008] 骑士
- ==和equals的比较方式
- linux学习笔记整理(五)
- Pyhton对象解释
- Wowza 相关
- Logistic 最大熵 朴素贝叶斯 HMM MEMM CRF 几个模型的总结
- Problem E: 平面上的点——Point类 (V)
- 583. Delete Operation for Two Strings
- [luogu2144][bzoj1002][FJOI2007]轮状病毒【高精度+斐波那契数列+基尔霍夫矩阵】
- js学习、备忘
- 八幅漫画理解使用 JSON Web Token 设计单点登录系统
- HTML标签(持续更新)
热门文章
- sping框架(3)— 使用spring容器
- mac mysql连接报错ERROR 1045 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39; (using password: YES)
- IE8 兼容CSS3 使用 PIE.htc
- 【EF】Entity Framework Core 2.0 特性介绍和使用指南
- 【bzoj1370】[Baltic2003]Gang团伙 并查集
- 浅析Nim游戏(洛谷P2197)
- hadoop 编码实现文件传输、查看等基本文件控制
- [洛谷P4345][SHOI2015]超能粒子炮&#183;改
- [NOIP2017]逛公园 最短路图 拓扑序DP
- BZOJ5314:[JSOI2018]潜入行动——题解