数据类似于:
上级部门 部门
山东 济南
湖南 长沙
山东
济南 历下
长沙 东塘
江西
江西 南昌
/*************************************************
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(...)
{
}
}