The QT container: QMap, QHash, QList
우선, 저 는 모든 용기 가 어떻게 작 동 하 는 지 공유 하 는 것 이 아니 라 실제 개발 과정 에서 겪 은 문 제 를 공유 하 는 것 입 니 다.
장면: 서버 에서 json 배열 을 받 았 습 니 다. 그 중에서 name 과 number 는 우리 가 저장 하고 싶 은 것 이기 때문에 첫 인상 은 QMap 을 사용 하여 key - value 로 저장 하 는 것 입 니 다.
모든 것 이 완벽 하 다.
QMap
QMap<QString, QString> map;
map.insert("beijing", "111");
map.insert("shanghai", "021");
map.insert("tianjin", "022");
map.insert("chongqing", "023");
map.insert("jinan", "0531");
map.insert("wuhan", "027");
QMap<QString, QString>::const_iterator i;
for( i=map.constBegin(); i!=map.constEnd(); ++i)
{
qDebug() <<i.key() <<" " <<i.value();
}
모든 것 이 완벽 하지만 서버 쪽 과 순서 가 다르다 는 것 을 발견 했다.출력:
"beijing" "111"
"chongqing" "023"
"jinan" "0531"
"shanghai" "021"
"tianjin" "022"
"wuhan" "027"
여 기 는 크게 놀 랄 필요 가 없습니다. C + STL MAP 에서 맵 이 키 에 따라 정렬 되 어 효율 을 높 일 수 있다 는 것 을 알 수 있 습 니 다.
그래서 우 리 는 정렬 할 필요 가 없다. 그래서 우 리 는 QMap 대신 QHash 를 사용한다.
QHash
QHash<QString, QString> hash;
hash.insert("beijing", "111");
hash.insert("shanghai", "021");
hash.insert("tianjin", "022");
hash.insert("chongqing", "023");
hash.insert("jinan", "0531");
hash.insert("wuhan", "027");
for (auto it = hash.begin(); it != hash.end(); it++)
{
qDebug() << it.key() << " " <<it.value();
}
출력:
"wuhan" "027"
"jinan" "0531"
"shanghai" "021"
"tianjin" "022"
"chongqing" "023"
"beijing" "111"
출력 다시 실행:
"chongqing" "023"
"jinan" "0531"
"beijing" "111"
"shanghai" "021"
"wuhan" "027"
"tianjin" "022"
보 셨 죠? 매번 출력 은 무 작위 입 니 다. 문 제 는 우리 가 qhash 하 시 를 옮 겨 다 닐 때 교체 기 는 무 작위 입 니 다.
이때 QMap, QHash 가 우리 의 목적 을 달성 하지 못 했 으 니 이 럴 때 QList 를 사용 할 수 있 습 니 다.
QList 와 QPair 두 가지 조합 은 매우 쓰기 좋다.
QList<QPair<QString, QString>> list;
list.append(qMakePair("beijing", "111"));
list.append(qMakePair("shanghai", "021"));
list.append(qMakePair("tianjin", "022"));
list.append(qMakePair("chongqing", "023"));
list.append(qMakePair("jinan", "0531"));
list.append(qMakePair("wuhan", "027"));
for(int i = 0; i < list.size(); i++)
{
qDebug() << list.at(i).first << " " << list.at(i).second;
}
잠깐 만, 무슨 일이 야, 잘못 보 고 했 어!!!!error: array used as initializer
그래서 수정:
QList<QPair<QString, QString>> list;
list.append(qMakePair(QString("beijing"), QString("111")));
list.append(qMakePair(QString("shanghai"), QString("021")));
list.append(qMakePair(QString("tianjin"), QString("022")));
list.append(qMakePair(QString("chongqing"), QString("023")));
list.append(qMakePair(QString("jinan"), QString("0531")));
list.append(qMakePair(QString("wuhan"), QString("027")));
for(int i = 0; i < list.size(); i++)
{
qDebug() << list.at(i).first << " " << list.at(i).second;
}
실행 결과:
"beijing" "111"
"shanghai" "021"
"tianjin" "022"
"chongqing" "023"
"jinan" "0531"
"wuhan" "027"
목적 달성, 완벽!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
qt 파일 작업텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.