给定两列数据,生成树结构

数据类似于:

上级部门              部门

 

山东                    济南

湖南                    长沙

                          山东

济南                    历下

长沙                    东塘

                          江西

江西                    南昌

 

/*************************************************
  Function:            GetTopDepartment
  Description:        获取顶级部门
  Calls:                     
  Called By:             
  Table Accessed:     
  Table Updated:     
  Input:            mlmapDep    <上级部门,部门>
                    vecTopDep    存储顶级部门
  Output:                    
  Return:                       
  Others:           
*************************************************/
void GetTopDepartment(multimap<string,string> &mlmapDep,vector<string> &vecTopDep)
{
    vecTopDep.clear();

    vector<string> vecFir;    /* 上级部门 */
    vector<string> vecSec;    /* 部门 */

    multimap<string,string>::iterator iter = mlmapDep.begin();
    while (iter != mlmapDep.end())
    {
        string strFir = iter->first;
        string strSec = iter->second;

        if (!strFir.length())    /* 只要上级部门为空,则为顶级部门 */
        {
            vecTopDep.push_back(strSec);
        }
        else
        {
            vecFir.push_back(strFir);
        }

        vecSec.push_back(strSec);

        iter++;
    }

    sort(vecFir.begin(),vecFir.end());
    sort(vecSec.begin(),vecSec.end());

    vector<string>::iterator iterUnqFir = unique(vecFir.begin(),vecFir.end());
   
    vecFir.erase(iterUnqFir,vecFir.end());

    vector<string>::iterator iterUnqSec = unique(vecSec.begin(),vecSec.end());
   
    vecSec.erase(iterUnqSec,vecSec.end());

    /* 存在于上级部门中,且不存在于部门中,则为顶级部门 */
    set_difference(vecFir.begin(),vecFir.end(),vecSec.begin(),vecSec.end(),back_inserter(vecTopDep));

    sort(vecTopDep.begin(),vecTopDep.end());

//     vector<string>::iterator end_unique = unique(vecTopDep.begin(),vecTopDep.end());
//
//     vecTopDep.erase(end_unique,vecTopDep.end());
}

void CreateTreeEx(CTreeCtrl& treeCtrl, string strDep, multimap<string, string> &allDepDep, map<string, HTREEITEM> &allDepItem,BOOL bRoot,vector<string> &vecTopDep)
{
    try
    {
       
        HTREEITEM htiDep = allDepItem[strDep];
       
        if(htiDep != NULL || bRoot)
        {
//            pair<multimap<string, string>::iterator, multimap<string, string>::iterator> range = allDepDep.equal_range(strDep);    /* strDep为""指BranchID为空,即所有一级目录 */

            vector<string>::iterator iter = vecTopDep.begin();

            while (iter != vecTopDep.end())
            {
                HTREEITEM hti = treeCtrl.InsertItem(iter->c_str(), 0,0, htiDep);
               
                allDepItem[*iter] = hti;
               
                CreateTree(treeCtrl, *iter, allDepDep, allDepItem);

                iter++;
            }
           
        }
    }
    catch(...)
    {
       
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值