gpt4 book ai didi

c++ - 将两个列表合并为一个列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:25:45 25 4
gpt4 key购买 nike

我正在尝试解决这个问题:Search multiple list for missing entries .我使用多重映射来复制键。这是我的代码:

#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;

}

但是这里的组合太多了,所以我需要什么问题?我认为它应该可以正常工作

最佳答案

你的问题出在这里:

if (i==s.end()){
cout<<(*i).first<< " "<<*IT<<endl;
}

如果 i 是 s.end() 你就不能再访问它了。这意味着它是无效的。你需要检查它不是 s.end()

if( i != s.end() )

这就是你崩溃的原因。但是,我有一些问题理解您打算就如何解决您的问题提出更好的建议。

编辑:

问题的解决方案可能是这样的:

#include <map>
#include <set>
#include <iostream>

struct d {
char c;
int i;
};

int main()
{
d data[] = {
{ 'A', 1 },
{ 'A', 2 },
{ 'B', 2 },
{ 'B', 3 },
{ 'C', 1 },
{ 'C', 3 }
};

std::map< char, std::set<int> > data_map;
for( size_t i = 0; i < sizeof(data)/sizeof(d); ++i ) {
data_map[ data[i].c ].insert( data[i].i );
}

for( char c = 'A'; c < 'D'; ++c ) {
for( int i = 1; i < 4; ++i ) {
if( data_map[c].count( i ) == 0 ) {
std::cout << c << " " << i << " is missing" << std::endl;
}
}
}

return 0;
}

输出:

A 3 is missingB 1 is missingC 2 is missing

关于c++ - 将两个列表合并为一个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3902005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com