例如
 struct  RoleStr
{
DWORD RoleId;  
CString RoleName;  
};
list<RoleStr> ListI;
list<RoleStr>::iterator iterListI;这个里面的类型是结构体了..
这个时候我该如何写才能够使用
List中的成员函数 unique() 删除list中重复的元素 
呢??

解决方案 »

  1.   

    #include "stdafx.h"#include <iostream>
    #include <list>
    #include <algorithm>
    using namespace std;struct RoleStr
    {
    RoleStr(DWORD id, CString name) : RoleId(id), RoleName(name)
    { }
    DWORD RoleId;
    CString RoleName; bool operator<(RoleStr str)
    {
    return RoleId < str.RoleId;
    } bool operator==(RoleStr str)
    {
    return (RoleId == str.RoleId) && (RoleName == str.RoleName);
    }
    };list<RoleStr> ListI;
    list<RoleStr>::iterator iterListI;bool MyFun1(RoleStr str1, RoleStr str2)
    {
    return str1 < str2;
    }bool MyFun2(RoleStr str1, RoleStr str2)
    {
    return (str1 == str2);
    }int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
    {
    RoleStr str1(1, _T("A"));
    RoleStr str2(2, _T("B"));
    RoleStr str3(3, _T("C"));
    RoleStr str22(2, _T("B"));
    RoleStr str4(4, _T("D"));
    RoleStr str11(1, _T("A"));
    ListI.push_back(str1);
    ListI.push_back(str2);
    ListI.push_back(str3);
    ListI.push_back(str22);
    ListI.push_back(str4);
    ListI.push_back(str11); cout<<"Before: "<<endl; TCHAR buf[256] = {0};
    DWORD dwWrite = 0;
    for(iterListI = ListI.begin(); iterListI != ListI.end(); ++iterListI)
    {
    _stprintf_s(buf, _countof(buf), _T("RoleId: %d, RoleName: %s\n"), iterListI->RoleId, iterListI->RoleName);
    WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), buf, _tcslen(buf), &dwWrite, NULL);
    } ListI.sort(MyFun1); list<RoleStr>::iterator iterEnd = unique(ListI.begin(), ListI.end(), MyFun2); cout<<"After: "<<endl; for(iterListI = ListI.begin(); iterListI != iterEnd; ++iterListI)
    {
    _stprintf_s(buf, _countof(buf), _T("RoleId: %d, RoleName: %s\n"), iterListI->RoleId, iterListI->RoleName);
    WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), buf, _tcslen(buf), &dwWrite, NULL);
    }
    return 0;
    }