#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的排序方法,在连接的时候就会运行,是在程序主入口之前调用