You need to enable JavaScript to run this app. C++向STL multimap插入struct类型值编译报错如何解决?
优惠活动
大模型
产品
解决方案
定价
更多

C++向STL multimap插入struct类型值编译报错如何解决?

问题原因
  • 错误1(直接对应编译报错):typedef std::multimap<int,struct temp> mapobj; 是给std::multimap<int, temp>类型定义了别名叫mapobj,它本身是类型标识符不是实例对象,不能直接对类型调用成员方法insert,所以编译器看到mapobj.insert会直接报错,需要先声明该类型的实例对象再调用方法。
  • 错误2:插入时构造键值对的语法错误,正确构造std::pair<int, temp>类型键值对的方式可以用std::make_pair(key, t),或者显式构造std::pair<int, temp>(key, t),你写的pair<int,struct>key,t既缺少命名空间前缀、类型参数不完整,也没有用括号包裹构造参数,语法完全不合法。
正确实现代码
#include <stdio.h>
#include <map>
#include <utility> // make_pair依赖的头文件,部分编译器下map会自动引入,建议显式包含

struct temp
{
   int x;
   int id;
};

int main()
{
    temp t;
    int key;
    // 定义multimap类型别名
    typedef std::multimap<int, temp> mapobj;
    // 声明multimap实例对象
    mapobj m;
    t.x = 10;
    t.id = 20;
    key = 1;
    // 插入方式1:make_pair构造键值对,兼容所有C++版本
    m.insert(std::make_pair(key, t));
    // 插入方式2:C++11及以上版本支持的花括号初始化,写法更简洁
    // m.insert({key, t});
    // 插入方式3:C++11及以上版本支持的emplace,直接在容器内构造对象性能更高
    // m.emplace(key, t);

    // 遍历验证插入结果
    for (const auto& item : m) {
        printf("key: %d, x: %d, id: %d\n", item.first, item.second.x, item.second.id);
    }
    return 0;
}
补充说明

自定义struct作为multimap的value存储时,不需要额外重载比较运算符,因为multimap的排序规则仅作用于key,value只要满足可复制/可移动的要求即可,你定义的temp结构体默认符合要求,不需要额外修改。

内容的提问来源于stack exchange,提问作者Ganesh Sha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 03:36:04