qmap 예제

avatar
| Uncategorized

이 예제에서는 직원의 이름을 비교하는 것으로 시작합니다. 그들이 동등하다면, 우리는 그들의 생년월일을 비교하여 넥타이를 끊습니다. 필요한 항목 수를 미리 알고 있으면 벡터를 정의하고 [] 연산자에서 항목에 값을 할당할 때 벡터에 초기 크기를 지정할 수 있습니다. 그렇지 않으면 나중에 벡터의 크기를 조정하거나 항목을 부가해야 합니다. 다음은 초기 크기를 지정하는 예제입니다. QStack 푸시(), 팝(), top()을 제공하는 벡터입니다. QQueue enqueue(), dequeue() 및 head()를 제공하는 목록입니다. 일부 클래스는 QMap 내에서 사용할 수 없습니다. 예를 들어 QObject에서 파생된 모든 것과 위젯을 구현하는 모든 클래스입니다. QMap에서는 값만 사용할 수 있습니다.

값으로 한정하려면 클래스에서 다른 접근 방식이 연산자[]를 사용한다는 것을 제공해야 합니다. 그러나 맵에 찾고 있는 요소에 대한 항목이 없는 경우 operator[]가 기본값을 삽입합니다. 검색중인 요소가 실제로 목록에 있는지 모르는 경우 operator[]를 사용해서는 안 됩니다. 다음 예제에서는 이를 보여 줍니다. Qt는 임의의 컨테이너에서 작업을 수행하는 일반 알고리즘도 제공합니다. 예를 들어 qSort() 알고리즘은 순차 컨테이너를 정렬하고 qBinaryFind()는 정렬된 순차 컨테이너에서 이진 검색을 수행합니다. 이러한 알고리즘은 STL에서 제공하는 알고리즘과 유사합니다. 읽기 전용 Java 스타일 이터레이터를 사용하면 복사본을 가져갈 필요가 없습니다. 반복기는 처음부터 복사본을 가져와 함수가 처음 반환한 데이터를 항상 반복하도록 합니다.

예: 몇 가지 Qt 함수가 컨테이너를 반환합니다. STL 스타일 반복기를 사용하여 함수의 반환 값을 반복하려면 컨테이너의 복사본을 가져 와서 복사본을 반복해야 합니다. 예를 들어 다음 코드는 QSplitter::sizes() 반환된 QList 를 반복하는 올바른 방법입니다. 이터레이터는 항목의 위치를 지정하는 데도 사용됩니다. 예를 들어 다음 코드는 “Clash”와 “Ramones” 사이에 “Tote Hosen” 문자열을 삽입합니다. 그렇지 않으면 컴파일러가 >> 연산자라고 생각하는 것에 질식합니다. 예를 들어 방금 언급한 형식 외에도 컨테이너의 값 형식은 앞에서 설명한 조건을 충족하는 모든 사용자 지정 클래스일 수 있습니다. 다음은 이러한 클래스의 예입니다. 일반적으로 맵에서 키를 찾기 위해 operator[]()가 아닌 포함() 및 value()를 사용하는 것이 좋습니다. 그 이유는 operator[]()가 동일한 키를 가진 항목이 없는 경우(맵이 const가 아니라면) 자동으로 맵에 항목을 삽입하기 때문입니다.

예를 들어 다음 코드 스니펫은 메모리에 1000개의 항목을 만듭니다. QMap에 이미 있는 키를 사용하여 insert()를 호출하면 이전 값이 지워집니다. 예를 들어 암시적 공유는 백그라운드에서 자동으로 작동하므로 이 최적화를 위해 코드에서 아무 작업도 수행할 필요가 없습니다. 그러나 일이 어떻게 작동하는지 아는 것이 좋기 때문에 우리는 예를 연구하고 후드 아래에서 무슨 일이 일어나는지 볼 것입니다. 이 예제에서는 Qt의 많은 암시적으로 공유된 클래스 중 하나인 QString을 사용합니다. 맵의 첫 번째 요소를 가리키는 이터레이터를 반환합니다. 이 이 거터는 맵이 비어 있는 경우 end()와 같습니다.