当前位置: 首页>>代码示例>>C++>>正文


C++ Relation::addrelation方法代码示例

本文整理汇总了C++中Relation::addrelation方法的典型用法代码示例。如果您正苦于以下问题:C++ Relation::addrelation方法的具体用法?C++ Relation::addrelation怎么用?C++ Relation::addrelation使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在Relation的用法示例。


在下文中一共展示了Relation::addrelation方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: join

Relation::Atom join(Relation *r1, Relation *r2, std::vector<std::string> list1, 
      std::vector<std::string> list2){
   using namespace std;
   int size1 = r1->size();   
   int size2 = r2->size();
   Relation* finalr = new Relation();   
   vector<string> commonvar;
   
   if (size1 == 0 || size2 == 0){ //TO DO use assert or raise exceptions?
      cerr << "No relations yet!" << endl;
   } else if (list1.size()!=r1->arity() || list2.size() != r2->arity()){
      cerr << "Number of variables don't match arity!" <<endl;
   } else {
      int arity1 = r1->arity();
      int arity2 = r2->arity();

      //1. Find common variables
      vector<int>::iterator it;      
      vector<vector<int> > temp = commonOrder(list1,list2);
      vector<int> order1 = temp[0];
      vector<int> order2 = temp[1];
      int ncommonvar = temp[2][0];
      
      //2. Order R and R', such that restrictions to X have same order      
      r1->sortrelations(order1);
      r2->sortrelations(order2);      
      //r1->write("testoutput1"); 
      //r2->write("testoutput2");    
      
      //3. Iterate over R and R', call t and t'
      int istart = 0;
      int jstart = 0;
      int iend = 0;
      int jend = 0;
      while (istart<size1 && jstart < size2){
         //load t and t'
         vector<int> v1 = r1->getindex(istart);
         vector<int> v2 = r2->getindex(jstart);

         int flag = compare_vect(v1, v2, order1, order2, ncommonvar);

         switch(flag){
            case 0:
               //find all i equal v1
               iend = istart+1;
               while(iend<size1 && compare_vect(v1,
                  r1->getindex(iend),order1,order1,ncommonvar)==0){
                  iend++;
               }
                     
               //find all j equals v2
               jend = jstart+1;
               while(jend<size2 && compare_vect(v2,
                  r2->getindex(jend),order2,order2,ncommonvar)==0){
                  jend++;
               }

               //for loop over istart, iend, jstart, jend
               for (int i = istart; i<iend; i++){
                  for (int j = jstart; j<jend; j++){
                     //copy from list 1
                     vector<int> newrel1(r1->getindex(i)); 
 
                     //add unrepeated from list 2
                     vector<int> newrel2(r2->getindex(j));
                     for (int k = 0; k<(order2.size()-ncommonvar);k++){
                        newrel1.push_back(newrel2[order2[k+ncommonvar]]);
                     }
                     //insert into finalr
                     finalr->addrelation(newrel1);
                  }
               }
               
               //4. Jump to first tuples that disag w t and t'
               istart=iend;
               jstart=jend;
               break;
      
            //projX t =/= projXt' -> if go to t or t' depending if projX t or projXt' is smaller            
            case 1: //v2 smaller
               jstart++;
               break;
               
            case -1: //v1 smaller
               istart++;
               break;
               
            default:
               cerr<<"Wrong comparison"<<endl;
         }
      }

      //Return variables and relation
      //fill in rest of variables to final string vector to return
      commonvar.insert(commonvar.end(),list1.begin(),list1.end());
      for (it = order2.begin()+ncommonvar;it != order2.end();++it){
         commonvar.push_back(list2[*it]);
      }

      vector<string>::iterator itstring;
//.........这里部分代码省略.........
开发者ID:vasseurthibaut,项目名称:INF442Projet,代码行数:101,代码来源:Join_seq.cpp


注:本文中的Relation::addrelation方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。