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
相关产品推荐
相关产品推荐

