set排序问题

来源:互联网 发布:厘米换算英尺英寸编程 编辑:程序博客网 时间:2024/06/15 02:25

#include <set>
#include <iostream>
class ChildClient
{
public:
int iCurCount;
int iMaxCount;
ChildClient(int iMax, int iCur)
{
iMaxCount = iMax;
iCurCount = iCur;
}
bool operator<(const ChildClient* pClient) const
{
return (iMaxCount - iCurCount) < (pClient->iMaxCount - pClient->iCurCount);
}
};
class KChild
{
public:
int iKAK;
void * p;
KChild(int k, void * ppp)
{
iKAK = k;
p=ppp;
}
bool operator<(const KChild pClient) const
{
return pClient.iKAK > iKAK;
}
};
int _tmain(int argc, _TCHAR* argv[])
{
ChildClient * pClient1 = new ChildClient(8,1);
ChildClient * pClient2 = new ChildClient(8,5);
ChildClient * pClient3 = new ChildClient(8,4);
std::set<ChildClient*> setSort;
setSort.insert(pClient1);
setSort.insert(pClient2);
setSort.insert(pClient3);
std::set<ChildClient*>::iterator iter = setSort.begin();
for(; iter != setSort.end(); iter++)
{
ChildClient* pClient = (ChildClient*)*iter;
std::cout << pClient->iCurCount << std::endl;
}
std::cout << "*******************************" << std::endl;
std::multiset<KChild> setSortK;
int i = 0;
int j = 1;
setSortK.insert(KChild(3, &i));
setSortK.insert(KChild(5, &j));
setSortK.insert(KChild(5, &i));
std::multiset<KChild>::iterator iterK = setSortK.begin();
for(; iterK != setSortK.end(); iterK++)
{
KChild objKC = (KChild)*iterK;
std::cout << objKC.iKAK << std::endl;
}
int n;
std::cin >> n;
return 0;
}
set中不能通过存储的指针所指向的内容进行排序,如std::set<ChildClient*>这个就不能排序, 而存储的对象的成员可以用来排序,如std::multiset<KChild>;
如果实在需要一个指针也存入set, 则可以构造一个类,包含一个比较参数和需要存储的指针, 如
class WaitingRoomNode
{
public:
int m_iWaitCount;
CGameRoom* m_pGameRoom;
WaitingRoomNode(int iCount, CGameRoom* pGameRoom)
{
m_iWaitCount = iCount;
m_pGameRoom = pGameRoom;
}
bool operator<(const WaitingRoomNode objNode) const
{
return objNode.m_iWaitCount > m_iWaitCount;
}
};
另外,set的排序方法,在连接的时候就会运行,是在程序主入口之前调用

原创粉丝点击