2012-12-10 38 views
0

我有兩個載體由蛋白質pdb id如1A3BA,3B5RE,1WYX5。我想比較這兩個載體中的蛋白質列表是否相同。有什麼不同?我試圖在C++中使用stl算法,但始終存在段錯誤!有沒有人可以告訴我什麼是錯的..? 我還不太肯定的排序算法,但anyway..No不管我把分揀或不代碼有問題的話...如何比較和排序向量<string>在c

vector<string> pdb_b_list; 
vector<string> pdb_a_list; 
vector<string> intset; 
vector<string>::iterator im; 

      sort(pdb_a_list.begin(),pdb_a_list.end()); 
      sort(pdb_b_list.begin(),pdb_a_list.end()); 

     if (includes(pdb_a_list.begin(), pdb_a_list.end(), pdb_b_list.begin(), pdb_b_list.end())){ 
      cout << "a includes b"<<endl; 
      cnt_s++; 
       } 

     else if (includes(pdb_b_list.begin(), pdb_b_list.end(), pdb_a_list.begin(), pdb_a_list.end())){ 
      cout <<"b includes a" <<endl; 
      cnt_s++; 
       } 
     else  { 
      cout << "different proteins in the sets" <<endl; 
      cnt_d++; 
      //sort(pdb_a_list.begin(),pdb_a_list.end()); 
      // sort(pdb_b_list.begin(),pdb_a_list.end()); 
      im = set_intersection(pdb_a_list.begin(),pdb_a_list.end(),pdb_b_list.begin(),pdb_a_list.end(), intset.begin()); 
      cout <<" the intersetion has \t" <<int(im- intset.begin())<<"elements" <<endl; 

        } 

回答

3

對你如何整理你的第二個向量一看:

sort(pdb_b_list.begin(),pdb_a_list.end()); 

您插入錯誤的結束索引,它應該是pdb_**b**_list.end(),因此段錯誤。

+0

而且我認爲如果您在調試模式下編譯,Microsoft C++庫會大聲比較來自不同對象的迭代器。 –

+0

OK .. but after fix the a/b issue ... it it like like my intersetion would be be 0/...所以我再加一個表示iaa = set_difference(pdb_a_list.begin(),pdb_a_list.end( ),pdb_b_list.begin(),pdb_b_list.end(),diffset.begin()); cout <<「差異部分有\ t」<< int(iaa - diffset.begin())<<「\ t elements」<< endl;那麼會再次出現段錯誤.. :-( – user1830108