修改网页排名

很久以前就听说过“竞价排名”,今天基于TSE也写了一个自己理解的竞价排名雏形,满有意思的。

现在必须手动加入排名靠前的url。

要在CQuery模块中加入一个方法

 1 bool CQuery::Get_url_weight(set<string>& weight_set) const {
 2     ifstream ifs(Url_Weight_NAME.c_str(), ios::binary);
 3     if (!ifs) {
 4         cerr << "Cannot open " << Url_Weight_NAME << " for input\n";
 5         return false;
 6     }
 7     string strLine, strDocid, strUrl;
 8     while (getline(ifs, strLine)) {
 9         string fst;
10         int idx = strLine.find("\t");
11         fst=strLine.substr(0,idx);
12         weight_set.insert(fst);
13     }
14     return true;
15 }

在TseSearch.cpp获取相关url集合后,加入下边这段代码,还有一些定义没有写出来,这个很容易搞定,就不贴出来了。

 1     //url-->weight
 2     set<string> weight_set,final_weight_set,tmp;
 3     final_weight_set.clear();
 4     tmp.clear();
 5     iQuery.Get_url_weight(weight_set);
 6     set_intersection (weight_set.begin(),weight_set.end(),
 7             setRelevantRst.begin(),setRelevantRst.end(),
 8             inserter(final_weight_set, final_weight_set.begin()));
 9 
10     set_difference (setRelevantRst.begin(),setRelevantRst.end(),
11             weight_set.begin(),weight_set.end(),
12             inserter(tmp, tmp.begin()));
13     setRelevantRst.clear();
14     setRelevantRst=tmp;
15     /////////////

还有最后调用ShowBelow的时候,ShowBelow这个函数也要修改,我是加了一个参数

iDisplayRst.ShowBelow(vecTerm,setRelevantRst,final_weight_set,vecDocIdx,iQuery.m_iStart);

先对“竞价的”(final_weight_set)的输出,再对其他的(setRelevantRst)输出

很容易实现的,我是直接把循环的代码复制一遍得到的,代码就不贴啦。

吐槽一下,STL的algorithm真尼玛不好用。

原文地址:https://www.cnblogs.com/kakamilan/p/2646386.html