У меня есть два вектора делают по идентификатору белка pdb, такие как 1A3BA, 3B5RE, 1WYX5. Я хочу сравнить, если список белков в этих буксирных векторах одинаков. а в чем разница? Я пытался использовать алгоритмы stl в 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;
}
Посмотрите, как вы сортируете свой второй вектор:
sort(pdb_b_list.begin(),pdb_a_list.end());
Вы вводите неверный конечный индекс, он должен быть pdb_**b**_list.end()
Таким образом, это ошибка.
Других решений пока нет …