需求:
客戶端收到游戲中的所有聯盟列表,現在需要按聯盟的屬性比如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。
通過參考這個,我個人覺得函數對象的方法使用最方便,維護量少,而且統一。
