需求:算法
客戶端收到遊戲中的全部聯盟列表,如今須要按聯盟的屬性好比lv來進行排序。函數
數據存儲:ui
每一個聯盟數據是一個對象,全部的聯盟列表存在一個vector容器裏面。spa
老的解決方法:.net
冒泡排序方法算法對象
新的方法:blog
參考http://blog.csdn.net/aastoneaa/article/details/8471722,總結使用C++自帶的std::sort函數。排序
詳細方法:遊戲
軍團對象,定義了軍團的各類簡單屬性ip
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。
經過參考這個,我我的以爲函數對象的方法使用最方便,維護量少,並且統一。