【问题标题】:Inserting a struct as a value in Multimap and Iterating the same to get the values在 Multimap 中插入一个结构作为值并迭代它以获取值
【发布时间】:2021-09-15 03:28:04
【问题描述】:
#include <stdio.h>
#include <map>
struct temp
{
   int x;
   int id;
};

int main()
{
    temp t;
    int key;
    typedef std::multimap<int,struct temp> mapobj;
    t.x = 10;
    t.id = 20;
    key=1;
    mapobj.insert(pair<int,struct>key,t);
    //mapobj.insert(1,t);
    
    return 0;
 }

我是 STL 多图的新手,我正在尝试将我的结构数据插入多图,但出现此错误:

main.cpp:25:11: error: expected unqualified-id before ‘.’ token
     mapobj.insert(pair<int,struct temp>key,t);
           ^

寻求您对此的建议。

【问题讨论】:

  • typedef 声明一个类型别名,而不是给定类型的变量。
  • typedef std::multimap mapobj;需要将其更改为别名?
  • 这已经是一个别名。只需删除typedef
  • 还要注意mapobj.insert(pair&lt;int,struct&gt;key,t); 中的拼写错误,并且在引用类型时不需要struct 关键字。
  • 欢迎来到 Stack Overflow。在尝试这个之前你掌握了multimap&lt;int, int&gt; 吗?

标签: c++ struct multimap


【解决方案1】:

我认为您需要进行一些小的代码更改来修复编译错误,如下所示:

  1. 添加 2 个括号:mapobj.insert(std::pair(key,t) );
  2. 在 mapobj.insert(std::pairstruct temp>(key,t)) 中添加“struct temp”; (注意:您没有结构的名称:temp)。
  3. 请注意,您应该在文件底部第二次使用 ma​​pobj 时指定 std::pair
  4. 删除关键字Tydef(正如用户“Sam Varshavchik”所说,因为您不需要定义新类型,只需要定义一个新变量)。
  5. 顺便说一句,下面的问题不会导致编译错误,但是如果你初始化“key”的值会是一件好事,因为如果你不初始化“key”,则 key 可能具有非零的随机值。这称为未定义行为,以后可能会导致一些错误。

下面是编译成功的新代码:

#include <stdio.h>
#include <map>
    
struct temp
{
   int x;
   int id;
};

int main()
{
    temp t;
    int key = 1; // You should initialize the key
    std::multimap<int,struct temp> mapobj; // I fixed this line
    t.x = 10;
    t.id = 20;
    key=1;
    mapobj.insert(std::pair<int,struct temp>(key,t)); // I fixed this line
    //mapobj.insert(1,t);
    
    return 0;
 }

【讨论】:

  • 我仍然在编译更改的代码时看到此错误,20 | mapobj.insert(pair(key,t)); // 我修正了这一行 | ^~~~ |标准::对
  • @Ganesh Sha,要解决这个问题,我们需要在 "mapobj.insert(std::pair(key,t)); 中完全指定 "std::pair"; " - 我刚刚在代码中修复了这个问题,现在应该可以编译了。请再试一次并告诉我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多