set和multiset map和multimap 有成员函数find函数可快速查找


vector和list 没有find函数想要查找通过迭代器遍历


以下使用类重载运算符实现find_if快速查找:


typedef struct strTmpLinkMan

{

CString TmpLinkManName;

CString TmpLinkManeEmail;

}strTmpLinkMan;

typedef std::list<strTmpLinkMan> TmpLinkMan_t;

typedef std::list<strTmpLinkMan>::iterator TmpLinkManIter_t;


class FindthevalString

{

//STL查找TmpLinkManEmail是否含有

public:

FindthevalString(CString str) : m_LinkManEmail(str) {};

bool operator() (const strTmpLinkMan &t) const

{

return m_LinkManEmail == t.TmpLinkManeEmail;

}

private:

CString m_LinkManEmail;

};

typedef struct strTmpGroup

{

strTmpGroup()

{

pList = NULL;

}

CString strTmpGroupName;

CListUIEx* pList;

TmpLinkMan_t strTmpLinkList;

}strTmpGroup;


typedef std::list<strTmpGroup> strTmpGroupList_t;

typedef std::list<strTmpGroup>::iterator strTmpGroupIter_t;


class Findtheval

{

//STL查找CListUIEx* pList是否含有

public:

Findtheval(CListUIEx* x) : m_age(x) {};

bool operator() (const strTmpGroup &t) const

{

return m_age == t.pList;

}

private:

CListUIEx* m_age;

};



typedef struct stGroupUser_t

{

stGroupUser_t()

{

pTmpGroupList = NULL;

}

strTmpGroupList_t* pTmpGroupList;

}stGroupUser_t;


extern stGroupUser_t g_stTmpGroupInfo;


std::list<strTmpGroup>::iterator finded_pList = find_if(g_stTmpGroupInfo.pTmpGroupList->begin(), g_stTmpGroupInfo.pTmpGroupList->end(), Findtheval(pRightList));

if (finded_pList != g_stTmpGroupInfo.pTmpGroupList->end())

{

    //找到

    //查找是否有相同String LinkmanEmail

    std::list<strTmpLinkMan>::iterator finded_String = find_if(iterTmpGroupInfo->strTmpLinkList.begin(), iterTmpGroupInfo->strTmpLinkList.end(), FindthevalString(stTmpLinkMan.TmpLinkManeEmail));

if (finded_String == iterTmpGroupInfo->strTmpLinkList.end())

{

   //没有查找到

}

}