> 백엔드 개발 > C++ > 본문

값별로 사전을 정렬하는 C++ 프로그램

WBOY
풀어 주다: 2023-09-06 22:49:06
앞으로
982명이 탐색했습니다.

값별로 사전을 정렬하는 C++ 프로그램

다양한 컴퓨터 언어로 사용할 수 있는 사전이라는 데이터 구조가 있습니다. 키와 값에 따라 데이터를 저장하는 더 빠른 데이터 구조의 특별한 형태가 사전입니다. 특정 구성 요소를 거의 실시간으로 키별로 빠르게 검색할 수 있도록 키-값 쌍을 거기에 유지합니다. 사전과 유사한 데이터 구조는 C++ STL 언어 표준에 포함되어 있습니다. 이 데이터 구조를 "map"이라고 합니다. map은 모든 유형의 키와 값 쌍을 생성합니다(C++를 사용하므로 컴파일 전에 유형을 정의해야 합니다). 이번 섹션에서는 C++를 사용하여 사전 항목을 값에 따라 정렬하는 방법을 살펴보겠습니다.

먼저 지도 데이터 구조가 어떻게 정의되는지 살펴보겠습니다. 이러한 내부 템플릿 중 두 개가 필요합니다. 필요한 라이브러리와 구문은 아래에 나와 있습니다. -

지도 데이터 구조 정의 구문

으아아아

이 예에서 지도 데이터 구조를 사용하려면 "map" 라이브러리를 가져와야 합니다. 이를 위해서는 유형 1과 2의 데이터가 필요합니다. Type1은 키 매개변수의 데이터 유형을 나타내고, type2는 값 유형을 나타냅니다. 지도 유형 클래스에서 파생된 객체를 mapVariable이라고 합니다. 이제 이러한 핵심 요소를 기반으로 지도를 구성하는 방법을 살펴보겠습니다.

쌍의 벡터 사용

이 아이디어에서는 키-값 쌍의 벡터(C++ STL에서 얻은 또 다른 요소인 동적 배열)를 만듭니다. 그런 다음 비교 함수를 만들어 정렬합니다. 그런 다음 콘텐츠는 정렬된 형식으로 다시 맵에 저장됩니다.

알고리즘

  • 지도 M을 입력으로 사용

  • 키-값 쌍을 저장하기 위해 동적 배열 A를 정의하세요

  • M의 각 키-값 쌍 p에 대해

      을 실행합니다.
    • A

    • 에 p를 삽입하세요.
  • 키를 기준으로 A 정렬

  • 빈 지도 만들기 newMap

  • A의 모든 p 쌍에 대해 -

    • 는 newMap

    • 을 p에 삽입합니다.
  • 새 지도로 돌아가기

으아아아

출력

으아아아

이미 정렬을 했고, 최종 결과를 맵에 저장하면 정렬 전과 후의 차이를 볼 수 없습니다. 이는 맵 데이터 구조가 대부분의 경우 키별로 정렬된 형태로 데이터를 저장하기 때문입니다. 여기서는 벡터를 사용하여 값을 기준으로 정렬합니다. 벡터에서 직접 인쇄하면 순서를 찾을 수 있습니다.

한 쌍의 세트를 사용하세요

다른 유형의 데이터 구조인 세트를 사용하여 매핑된 데이터 구조에서 키-값 쌍을 정렬할 수 있습니다. 데이터는 컬렉션 데이터 구조로 정렬되어 유지됩니다. 따라서 컬렉션에 요소를 추가한 후에는 다시 정렬할 필요가 없습니다. 더 나은 이해를 위해 알고리즘을 살펴보겠습니다.

알고리즘

  • 지도 M을 입력으로 사용

  • 키-값 쌍을 저장하기 위해 컬렉션 S를 정의하세요

  • M의 각 키-값 쌍 p에 대해

      을 실행합니다.
    • S

    • 에 p를 삽입하세요.
  • 빈 지도 만들기 newMap

  • S의 모든 쌍 p -

    에 대해
    • 은 newMap

    • 을 p에 삽입합니다.
  • 새 지도로 돌아가기

으아아아

출력

으아아아

결론

이 게시물에서 우리는 사전 데이터 구조(C++에서는 map이라고 함)를 정렬하고 값을 기준으로 정렬하는 두 가지 방법을 살펴보았습니다. 맵은 해시 맵이므로 해당 키의 데이터는 해시 알고리즘을 사용하여 저장됩니다. 키는 다르지만 다른 키의 값은 동일할 수 있습니다. 우리는 벡터와 집합 모두 쌍 정보를 전달하는 집합 및 벡터 정렬을 사용하여 정렬합니다. 각 페어링은 두 가지 방법으로 정렬될 수 있습니다. 값 유형은 두 번째 유형이고 키 유형은 첫 번째 유형입니다.

위 내용은 값별로 사전을 정렬하는 C++ 프로그램의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:tutorialspoint.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿