求救
#include<iostream>using namespace std;
#include<map>
void print_map(const map<int,int>& s1,const map <int,int>& s2)
{
for(map<int,int>::const_iterator it=s2.begin();it!=s2.end();it++)
{
map<int,int> ::iterator itm =s1.find(it->first);//10 31 C:\Users\HP\Desktop\Untitled3.cpp conversion from 'std::map<int, int>::const_iterator {aka std::_Rb_tree_const_iterator<std::pair<const int, int> >}' to non-scalar type 'std::map<int, int>::iterator {aka std::_Rb_tree_iterator<std::pair<const int, int> >}' requested
if(itm !=s1.end())
{
cout<<itm->second<<" ";
}
}
cout<<endl;
}
int main()
{
map<int,int>m,m1;
m.insert(map<int,int>(1,20));
m.insert(map<int,int>(2,30));
m.insert(map<int,int>(3,40));
m.insert(map<int,int>(4,70));
m2.insert(map<int,int>(1,30));
m2.insert(map<int,int>(2,60));
m2.insert(map<int,int>(3,70));
m2.insert(map<int,int>(4,10));
print_map(s1,s2);
return 0;
} 这段代码有一些问题。首先,在 print_map 函数中, s1 和 s2 没有被定义,应该传入 m 和 m2 作为参数。其次,在 main 函数中, m1 没有被使用,可以将其删除。另外, m2 没有被定义,应该改为 m 。最后, return 0; 应该改为 return 0; 。
下面是修改后的代码:
#include<iostream>
using namespace std;
#include<map>
void print_map(const map<int,int>& s1, const map<int,int>& s2)
{
for(map<int,int>::const_iterator it=s2.begin(); it!=s2.end(); it++)
{
map<int,int>::const_iterator itm = s1.find(it->first);
if(itm != s1.end())
{
cout << itm->second << "";
}
}
cout << endl;
}
int main()
{
map<int,int> m;
m.insert(map<int,int>(1,20));
m.insert(map<int,int>(2,30));
m.insert(map<int,int>(3,40));
m.insert(map<int,int>(4,70));
print_map(m, m);
return 0;
}
这段代码的功能是打印出两个 map 中相同键对应的值。在 main 函数中,我们创建了一个 map 对象 m ,并向其中插入了四个键值对。然后,我们调用 print_map 函数,将 m 作为参数传入两次。在 print_map 函数中,我们遍历 s2 ,对于每个键,在 s1 中查找对应的值并输出。
希望这个解答对你有帮助!如果你有任何疑问,请随时提问。 isdkz 发表于 2023-9-5 21:54
这段代码有一些问题。首先,在 print_map 函数中, s1 和 s2 没有被定义,应该传入 m 和 m2 作为参数。其次 ...
end()是指向最后一个元素的下一个位置吗???还是指向最后一个元素 isdkz 发表于 2023-9-5 21:54
这段代码有一些问题。首先,在 print_map 函数中, s1 和 s2 没有被定义,应该传入 m 和 m2 作为参数。其次 ...
输出是错误的,达不到预想效果,想要输出两个不同序列中的相同元素 isdkz 发表于 2023-9-5 21:54
这段代码有一些问题。首先,在 print_map 函数中, s1 和 s2 没有被定义,应该传入 m 和 m2 作为参数。其次 ...
#include<iostream>
using namespace std;
#include<map>
void print_map(const map<int,int>&m1,const map<int,int>&m2)
{
for(map<int,int>::const_iterator it=m2.begin(); it!=m2.end(); it++)
{
map<int,int>::const_iterator itm =m1.find(it->first);
if(itm!=m1.end())
{
cout<<itm->second<<" ";
}
}cout<<endl;
}
int main()
{
map<int ,int > m1,m2;
m1.insert(pair<int,int>(1,10));
m1.insert(pair<int,int>(2,20));
m1.insert(pair<int,int>(3,30));
m1.insert(pair<int,int>(4,40));
m2.insert(pair<int,int>(1,30));
m2.insert(pair<int,int>(2,60));
m2.insert(pair<int,int>(3,40));
m2.insert(pair<int,int>(4,70));
print_map(m2,m1);
} WFR 发表于 2023-9-5 19:32
end()是指向最后一个元素的下一个位置吗???还是指向最后一个元素
`end()`是指向容器中最后一个元素后面的位置,不是最后一个元素本身。也就是说,如果使用迭代器返回的`end()`位置进行操作,将会导致越界。
在C++ STL中,常用的迭代器有`begin()`和`end()`,其中`begin()`返回容器中第一个元素的地址,而`end()`返回最后一个元素后面的位置。因此,常见的遍历容器方法如下:
map<int, int> m;
// 向m中插入元素。。。
for (auto it = m.begin(); it != m.end(); it++) {
// 遍历容器中的元素
}
在上面的代码中,使用迭代器`it`遍历了`m`这个`map`容器里的所有元素,当`it`指向最后一个元素后面的位置(即`end()`返回值),循环终止。注意,在以上遍历方式中,最后一个元素将不会被遍历到。
页:
[1]