#include "MySQLWrapper.h" #include #include #include #include #include #include #include #include #include #include using namespace std; #include "local_db_account.h" #include "util.hpp" int main() { /// 3.2 大数据职位需求量最高的前10名城市+大数据前六个岗位需求量排行 MySQLConn conn; conn.connect("127.0.0.1",db_user,db_passwd,"bigdata3",3306); cout<<"Connected to DB"< map> mp; conn.exec("select job_city,count(*) as want_num from lagou_job where ((title like '%大数据%' ) or ( tags like '%大数据%')) group by job_city order by want_num desc",[&](MySQLResult& res) { res.stepRow([&](char** val,unsigned long* len) { string city(val[0]); int cc=ParseInt(val[1]); mp[Trim(city)].push_back(cc); }); }); conn.exec("use bigdata5",nullptr); conn.exec("select job_city,count(*) as want_num from pages where ((title like '%大数据%' ) or ( tags like '%大数据%')) group by job_city order by want_num desc",[&](MySQLResult& res) { res.stepRow([&](char** val,unsigned long* len) { string city(val[0]); int cc=ParseInt(val[1]); mp[Trim(city)].push_back(cc); }); }); /// 去重+求和 auto fn1=[](map>& mp){ for(auto iter=mp.begin();iter!=mp.end(); ) { bool updated=false; for(auto xiter=mp.begin();xiter!=iter; ) { if(iter->first.find(xiter->first)!=string::npos) { /// Found something? /// targetvec.push_back(thisvec) : Add current vector to the previous vector. xiter->second.insert(xiter->second.end(), iter->second.begin(),iter->second.end()); /// iter should now be deleted. Get next iter first auto nowiter=iter; ++iter; mp.erase(nowiter); /// Stop internal loop. updated=true; break; } else ++xiter; } if(!updated) ++iter; } for(auto& pr:mp) { int sum=0; int n=pr.second.size(); for(int i=0;i map> dmp; conn.exec("use bigdata3",nullptr); conn.exec("select title,count(*) as want_num from lagou_job where ((title like '%大数据%' ) or ( tags like '%大数据%')) group by title order by want_num desc",[&](MySQLResult& res) { res.stepRow([&](char** val,unsigned long* len) { string title(val[0]); int cc=ParseInt(val[1]); dmp[Trim(title)].push_back(cc); }); }); conn.exec("use bigdata5",nullptr); conn.exec("select title,count(*) as want_num from pages where ((title like '%大数据%' ) or ( tags like '%大数据%')) group by title order by want_num desc",[&](MySQLResult& res) { res.stepRow([&](char** val,unsigned long* len) { string city(val[0]); int cc=ParseInt(val[1]); dmp[Trim(city)].push_back(cc); }); }); fn1(dmp); vector>> city_vec; do { vector>> vec; for(const auto& pr:mp) { vec.push_back(pr); } sort(vec.begin(),vec.end(),[&](const pair>& a,const pair>& b) { return a.second[0] > b.second[0] ; }); city_vec.insert(city_vec.end(),vec.begin(),vec.begin()+10); }while(0); vector>> job_vec; do { vector>> vec; for(const auto& pr:dmp) { vec.push_back(pr); } sort(vec.begin(),vec.end(),[&](const pair>& a,const pair>& b) { return a.second[0] > b.second[0] ; }); job_vec.insert(job_vec.end(),vec.begin(),vec.begin()+6); }while(0); /// index of city_vec, index of job_vec, count. map> tvec; int szCity=city_vec.size(); int szJob=job_vec.size(); auto fn2=[&conn](const string& cmd,int& cc){ conn.exec(cmd,[&](MySQLResult& res) { bool done=false; res.stepRow([&](char** val,unsigned long* len) { if(!done) { cc=ParseInt(val[0]); done=true; } }); }); }; for(int i=0;i