set排序问题

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值