set排序问题

    技术2022-05-19  20

    #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)