The QT container: QMap, QHash, QList

10049 단어 qtQLIstQHashQMap
오늘 은 QT 에 있 는 용 기 를 만 들 겠 습 니 다.
우선, 저 는 모든 용기 가 어떻게 작 동 하 는 지 공유 하 는 것 이 아니 라 실제 개발 과정 에서 겪 은 문 제 를 공유 하 는 것 입 니 다.
장면: 서버 에서 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"

목적 달성, 완벽!

좋은 웹페이지 즐겨찾기