QMap如果item不存在,get的时候不是nullptr,而是一个默认的值,比如bool是false;字符串是"";tuple也是由各种类型的默认值组成的默认tuple。
void tryMap() {
QMap<QString, std::tuple<bool, QString, QString, qint16>> map;
map.insert("a", std::make_tuple(true, "s","p",111));
auto it = std::get<0>(map["a"]); // true
auto it2 = std::get<0>(map["b"]); // false "b"不存在
auto it3 = std::get<1>(map["a"]); // "s"
auto it4 = std::get<1>(map["b"]); // ""
std::tuple<bool, QString, QString, qint16> it5 = map["b"]; // it5 空tuple
bool a1= std::get<0>(it5); // false, 默认bool的值
auto a2= std::get<1>(it5); // "", 默认QString的值
auto a3= std::get<2>(it5); // "", 默认QString的值
qDebug() << endl;
}
因此需要先用contain判断是否存在,如
if (map.contains("b") && std::get<0>(map["b"])) {
// map包含b,并且tuple的第一个bool是true
}