You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Qt 5.10中能否编写并初始化QMap<QString, QPair<int, int>>?

在Qt 5.10中初始化QMap<QString, QPair<int, int>>的正确方式

当然可以在Qt 5.10里实现这种类型的QMap初始化和使用!不过你给出的写法存在语法小问题,我来帮你修正并说明正确用法:

1. 单个键值对的初始化

你原来的写法QMap<QString, QPair<int, int>> ee{"MAC", 0,0,};不正确,因为QPair<int, int>作为值,需要用大括号把它的两个元素包裹起来,同时整个键值对也要用大括号包裹。正确的写法是:

// 初始化包含"MAC"对应(0,0)的QMap
QMap<QString, QPair<int, int>> ee{{"MAC", {0, 0}}};

之后要获取"MAC"对应的键值对,你可以这样做:

// 方式1:使用operator[](如果键不存在会自动插入默认构造的QPair)
QPair<int, int> macPair = ee["MAC"];
int section = macPair.first; // 得到0
int line = macPair.second;   // 得到0

// 方式2:使用value()方法(更安全,键不存在时返回默认值但不会插入新键)
if (ee.contains("MAC")) {
    QPair<int, int> macPair = ee.value("MAC");
    // 处理section和line
}

2. 多个键值对的批量初始化

你尝试的批量初始化写法里,每个键值对没有单独用大括号包裹,导致语法错误。正确的批量初始化应该给每个键值对都套一层大括号,像这样:

QMap<QString, QPair<int, int>> eepromDictionary = {
    {"MAC", {0, 0}},
    {"IP", {0, 0}},
    {"Mask", {0, 0}},
    {"ID", {0, 0}},
    {"Gateway", {0, 0}},
    {"Date", {0, 0}}
};

Qt 5.10完全支持C11的初始化列表语法,所以上面这些写法都是可以正常编译运行的。如果你的项目还没开启C11,记得在.pro文件里添加CONFIG += c++11哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:41:41