WFR 发表于 2023-9-5 21:53:53

求救

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

isdkz 发表于 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 中查找对应的值并输出。

希望这个解答对你有帮助!如果你有任何疑问,请随时提问。

WFR 发表于 2023-9-5 22:32:24

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

end()是指向最后一个元素的下一个位置吗???还是指向最后一个元素

WFR 发表于 2023-9-5 22:38:32

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

输出是错误的,达不到预想效果,想要输出两个不同序列中的相同元素

WFR 发表于 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);       
                               
}

Mike_python小 发表于 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()`返回值),循环终止。注意,在以上遍历方式中,最后一个元素将不会被遍历到。
页: [1]
查看完整版本: 求救