#include <iostream>
#include <cstdlib>
#include <algorithm>
#include <string>
#include <vector>
#include <map>
using namespace std;
void strToVec_int(const string &str,vector<int> &vi)
{
string::size_type b = 0,e = str.find("|");
while(e != string::npos)
{
vi.push_back(atoi(str.substr(b,e).c_str()));
b = e + 1;
e = str.find("|",b);
}
vi.push_back(atoi(str.substr(b).c_str()));
}
struct userData
{
string m_strHuntingNum; //号码
string m_strLastTime; //最晚挂机时间
void initialize(string &s1,string &s2)
{
m_strHuntingNum = s1;
m_strLastTime = s2;
}
};
bool sort_vec(const userData &us1,const userData &us2)
{
return us1.m_strLastTime < us2.m_strLastTime;
}
struct tab1
{
int m_iHuntingList;
int m_iHuntingType;
string m_strHuntingSeq;
};
struct tab2
{
int m_iHuntingList;
int m_iGLFlag;
int m_iHuntingNumID;
string m_strHuntingNum;
string m_strLastAnswerTime;;
string m_strLastHunpUpTime;
void initialize(int i,int j,int id,const string &n,const string &ml ,const string &mh)
{
m_iHuntingList = i;
m_iGLFlag = j;
m_iHuntingNumID = id;
m_strHuntingNum = n;
m_strLastAnswerTime = ml;
m_strLastHunpUpTime = mh;
}
};
struct tab3
{
int m_iHuntingList;
int m_iGLHuntingListID;
string m_strGLHungingSeq;
void initialize(int i,int j,const string &s)
{
m_iHuntingList = i;
m_iGLHuntingListID = j;
m_strGLHungingSeq = s;
}
};
struct tab4
{
int m_iHuntingList;
int m_iGLHuntingListID;
int m_iGLHuntListNumID;
string m_strHuntingNum;
string m_strLastAnswerTime;
string m_strLastHunpUpTime;
void initialize(int i,int j,int k,const string &s1,const string &s2,const string &s3)
{
m_iHuntingList = i;
m_iGLHuntingListID = j;
m_iGLHuntListNumID = k;
m_strHuntingNum = s1;
m_strLastAnswerTime = s2;
m_strLastHunpUpTime = s3;
}
};
int main(void)
{
puts("Program Start...");
tab1 t_oTb1;
vector<int> t_vecHuntingList;
{//tab1数据 先按最后应答时间排序(type = 1)
t_oTb1.m_iHuntingList = 1;
t_oTb1.m_iHuntingType = 0; //假设是按最后应答时间排序
t_oTb1.m_strHuntingSeq = "6|7|3|1|9|0";
strToVec_int(t_oTb1.m_strHuntingSeq,t_vecHuntingList);
}
vector<tab2> t_vecTab2;
map<int,int> t_mapGLListSeq;
map<int,vector<userData> > t_mapSeqNum;
userData t_oUserData;
{//tab2数据 vector<tab2>
tab2 tmp_oTab2;
tmp_oTab2.initialize(1,0/*flag*/,0/*seq*/,"000"/*num --GLHuntingListID*/,"1200","1900");
t_vecTab2.push_back(tmp_oTab2);
tmp_oTab2.initialize(1,1/*flag*/,6/*seq*/,"8"/*num*/,"1200","1900"); //需要查第三张表
t_vecTab2.push_back(tmp_oTab2);
tmp_oTab2.initialize(1,1/*flag*/,1/*seq*/,"1"/*num*/,"1200","1900"); //需要查第三张表
t_vecTab2.push_back(tmp_oTab2);
tmp_oTab2.initialize(1,0/*flag*/,7/*seq*/,"777"/*num*/,"1700","1500");
t_vecTab2.push_back(tmp_oTab2);
tmp_oTab2.initialize(1,1/*flag*/,3/*seq*/,"9"/*num*/,"1200","1900"); //需要查第三张表
t_vecTab2.push_back(tmp_oTab2);
tmp_oTab2.initialize(1,1/*flag*/,9/*seq*/,"10"/*num*/,"1200","1900"); //需要查第三张表
t_vecTab2.push_back(tmp_oTab2);
for(vector<tab2>::iterator it = t_vecTab2.begin(); it != t_vecTab2.end(); ++it)
{
if(it->m_iGLFlag == 1)
{
t_mapGLListSeq[atoi(it->m_strHuntingNum.c_str())] = it->m_iHuntingNumID;
}
else
{
t_oUserData.initialize(it->m_strHuntingNum,it->m_strLastAnswerTime);
if(t_oTb1.m_iHuntingType == 2 || t_oTb1.m_iHuntingType == 3) //按最晚时间或者同振
{
t_mapSeqNum[0].push_back(t_oUserData);
}
else
{
t_mapSeqNum[it->m_iHuntingNumID].push_back(t_oUserData);
}
}
}
}
vector<tab3> t_vecTab3; //第三张表数据
{//tab3数据 vector<tab3>
tab3 tmp_oTab3;
tmp_oTab3.initialize(1,10,"2|7|9");
t_vecTab3.push_back(tmp_oTab3);
tmp_oTab3.initialize(1,1,"3|5|8");
t_vecTab3.push_back(tmp_oTab3);
tmp_oTab3.initialize(1,9,"1|8|9");
t_vecTab3.push_back(tmp_oTab3);
tmp_oTab3.initialize(1,8,"2|7|9");
t_vecTab3.push_back(tmp_oTab3);
}
vector<tab4> t_vecTab4; //第四张表数据
{
tab4 tmp_oTab4;
tmp_oTab4.initialize(1,10,9,"911","1200","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,10,2,"922","1200","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,10,7,"977","1200","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,10,6,"12","1200","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,1,5,"511","1100","1900");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,1,3,"522","1200","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,1,8,"533","0900","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,1,6,"14","1200","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,9,8,"991","2355","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,9,1,"8899","2100","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,9,9,"300","2330","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,9,6,"13","1200","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,8,7,"777","2200","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,8,2,"888","1500","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,8,9,"999","2230","1300");
t_vecTab4.push_back(tmp_oTab4);
tmp_oTab4.initialize(1,8,6,"11","1200","1300");
t_vecTab4.push_back(tmp_oTab4);
}
vector<int> t_vecGLHuntingList;
vector<userData> t_vecUserData;
for(vector<tab3>::iterator it = t_vecTab3.begin(); it != t_vecTab3.end(); ++it) //循环第三张表
{
t_vecGLHuntingList.clear();
t_vecUserData.clear();
strToVec_int(it->m_strGLHungingSeq,t_vecGLHuntingList);
for(vector<int>::iterator ix = t_vecGLHuntingList.begin(); ix != t_vecGLHuntingList.end(); ++ix) //第三张表的seq循环
{
for(vector<tab4>::iterator iy = t_vecTab4.begin(); iy != t_vecTab4.end(); ++iy) //循环第四张表
{
if(*ix == iy->m_iGLHuntListNumID && it->m_iGLHuntingListID == iy->m_iGLHuntingListID)
{
t_oUserData.initialize(iy->m_strHuntingNum,iy->m_strLastAnswerTime);
t_vecUserData.push_back(t_oUserData);
}
}
}
if(t_oTb1.m_iHuntingType == 2 || t_oTb1.m_iHuntingType == 3) //按最晚时间或者同振
{
t_mapSeqNum[0].insert(t_mapSeqNum[0].begin(),t_vecUserData.begin(),t_vecUserData.end());
}
else
{
t_mapSeqNum[t_mapGLListSeq[it->m_iGLHuntingListID]] = t_vecUserData; //vector<userData>
}
}
if(t_oTb1.m_iHuntingType == 1) //这个条件新增加
{
string time;
int i = 0;
int seq = 0;
vector<int>::iterator ma;
for(vector<int>::iterator it = t_vecHuntingList.begin(); it != t_vecHuntingList.end(); ++it) //按照seq的顺序打印所有号码
{
cout<<"=================="<<*it<<"==========================="<<endl;
for(vector<userData>::iterator ix = t_mapSeqNum[*it].begin(); ix != t_mapSeqNum[*it].end(); ++ix)
{
cout<<ix->m_strHuntingNum<<'/t'<<ix->m_strLastTime<<endl;
if(ix->m_strLastTime > time)
{
time = ix->m_strLastTime;
i = ix - t_mapSeqNum[*it].begin(); //下标
seq = *it;
ma = it; //迭代器
}
}
}
cout<<"====================================================="<<endl;
//cout<<time<<'/t'<<i<<'/t'<<seq<<endl;
t_vecHuntingList.erase(ma);
t_vecHuntingList.push_back(seq);
t_mapSeqNum[t_vecHuntingList[0]].insert(t_mapSeqNum[t_vecHuntingList[0]].begin(),t_mapSeqNum[seq].begin()+i+1,t_mapSeqNum[seq].end());
t_mapSeqNum[seq].erase(t_mapSeqNum[seq].begin()+i+1,t_mapSeqNum[seq].end());
}
vector<string> t_vecNum;
if(t_oTb1.m_iHuntingType == 2 || t_oTb1.m_iHuntingType == 3) //按最晚时间或者同振
{
stable_sort(t_mapSeqNum[0].begin(),t_mapSeqNum[0].end(),sort_vec); //排个序
for(vector<userData>::iterator it = t_mapSeqNum[0].begin(); it != t_mapSeqNum[0].end(); ++it)
{
cout<<"Type = "<<t_oTb1.m_iHuntingType<<'/t'<<it->m_strHuntingNum<<'/t'<<it->m_strLastTime<<endl;
}
}
else
{
for(vector<int>::iterator it = t_vecHuntingList.begin(); it != t_vecHuntingList.end(); ++it) //按照seq的顺序打印所有号码
{
for(vector<userData>::iterator ix = t_mapSeqNum[*it].begin(); ix != t_mapSeqNum[*it].end(); ++ix)
{
t_vecNum.push_back(ix->m_strHuntingNum);
cout<<"Type = "<<t_oTb1.m_iHuntingType<<'/t'<<ix->m_strHuntingNum<<endl;
}
}
}
return 0;
}