鱼C论坛

 找回密码
 立即注册
查看: 1060|回复: 5

求救

[复制链接]
发表于 2023-9-5 21:53:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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 [Error] 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-9-5 21:54:20 | 显示全部楼层
这段代码有一些问题。首先,在 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 中查找对应的值并输出。

希望这个解答对你有帮助!如果你有任何疑问,请随时提问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-5 22:32:24 | 显示全部楼层
isdkz 发表于 2023-9-5 21:54
这段代码有一些问题。首先,在 print_map 函数中, s1 和 s2 没有被定义,应该传入 m 和 m2 作为参数。其次 ...

end()是指向最后一个元素的下一个位置吗???还是指向最后一个元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-5 22:38:32 | 显示全部楼层
isdkz 发表于 2023-9-5 21:54
这段代码有一些问题。首先,在 print_map 函数中, s1 和 s2 没有被定义,应该传入 m 和 m2 作为参数。其次 ...

输出是错误的,达不到预想效果,想要输出两个不同序列中的相同元素
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-5 22:40:07 | 显示全部楼层
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);       
                               
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-6 20:48:55 | 显示全部楼层
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()`返回值),循环终止。注意,在以上遍历方式中,最后一个元素将不会被遍历到。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 09:16

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表