Я пытаюсь решить эту проблему: Поиск нескольких списков для пропущенных записей . Я использовал мультикарту для дублирования ключей. Вот мой код:
#include <iostream>
#include <map>
#include <list>
#include <utility>
using namespace std;
int main(){
list<char>a;
list<int> b;
multimap<char,int>s;
a.push_back('A');
a.push_back('B');
a.push_back('C');
b.push_back(1);
b.push_back(2);
b.push_back(3);
s.insert(std::pair<char,int>('A',1));
s.insert(std::pair<char,int>('A',2));
s.insert(std::pair<char,int>('B',2));
s.insert(std::pair<char,int>('B',3));
s.insert(std::pair<char,int>('C',1));
s.insert(std::pair<char,int>('C',3));
list<char>::iterator it;
list<int>::iterator IT;
multimap<char,int>::iterator i;
for (i=s.begin();i!=s.end();i++){
for (IT=b.begin();IT!=b.end();IT++){
i=s.find(*IT);
if (i==s.end()){
cout<<(*i).first<< " "<<*IT<<endl;
}
}
}
return 0;
}
Он скомпилирован, но после запуска он перестает работать ненормально. Я думаю, что я не получаю доступ к элементам правильно. Пожалуйста, помогите мне.
РЕДАКТИРОВАТЬ:
я обновил свой код
#include <iostream>
#include <map>
#include <list>
#include <utility>
using namespace std;
int main(){
list<char>a;
list<int> b;
multimap<char,int>s;
a.push_back('A');
a.push_back('B');
a.push_back('C');
b.push_back(1);
b.push_back(2);
b.push_back(3);
s.insert(std::pair<char,int>('A',1));
s.insert(std::pair<char,int>('A',2));
s.insert(std::pair<char,int>('B',2));
s.insert(std::pair<char,int>('B',3));
s.insert(std::pair<char,int>('C',1));
s.insert(std::pair<char,int>('C',3));
list<char>::iterator it;
list<int>::iterator IT;
multimap<char,int>::iterator i;
for (it=a.begin();it!=a.end();it++){
for (i=s.begin();i!=s.end();i++){
for (IT=b.begin();IT!=b.end();IT++){
if ((*i).first==*it && ((*i).second!=*IT)){
cout<<(*i).first<< " "<<*IT<<endl;
}
}
}
}
return 0;
}
но здесь слишком много комбинации, тогда мне нужно, так в чем же проблема? Я думаю, что она должна работать правильно