지도 위치 C++ 표준 템플릿 라이브러리(STL)
⚡ 스마트 요약
지도 위치 C++ `<Template>`는 표준 템플릿 라이브러리(STL)의 연관 컨테이너로, 요소를 정렬된 키-값 쌍으로 저장합니다. 각 고유 키는 하나의 값에 매핑되어 빠른 조회, 삽입 및 정렬된 순회를 가능하게 합니다.

지도란 무엇인가요? C++?
In C++MAP은 매핑된 형태로 항목을 저장하는 연관 컨테이너입니다. 맵의 각 항목은 키 값과 매핑된 값으로 구성됩니다. 두 개의 매핑된 값은 동일한 키 값을 공유할 수 없습니다.
키 값은 요소를 정렬하고 고유하게 식별하는 데 유용하며, 매핑된 값은 각 키와 연결된 콘텐츠를 저장합니다. 두 값의 유형은 다를 수 있지만, 멤버 유형은 이 둘을 모두 포함하는 쌍으로 결합합니다.
코드를 작성하기 전에, 지도가 종종 적절한 컨테이너로 사용되는 이유를 아는 것이 도움이 됩니다.
std::map을 사용하는 이유는 무엇입니까?
지도를 사용하는 이유는 다음과 같습니다.
- std::map은 선택한 정렬 기준에 따라 정렬된 순서로 고유 키만 저장합니다.
- 키를 사용하면 요소를 쉽고 빠르게 검색할 수 있습니다.
- 각 키에는 하나의 요소만 연결됩니다.
- std::map은 연관 배열로 사용할 수 있습니다.
- std::map은 균형 이진 트리를 사용하여 구현할 수 있습니다.
이러한 이점을 활용하려면 먼저 선언 구문부터 살펴보세요.
통사론
std::map을 선언하려면 다음 구문을 사용하세요.
std::map<key_datatype, value_datatype>map_name;
- The 키 데이터 유형 맵 키의 데이터 유형을 나타냅니다.
- The 값_데이터 유형 맵 키에 해당하는 값의 데이터 유형을 나타냅니다.
- The 지도 이름 지도의 이름입니다.
예 :
map<string, int> my_map;
우리는 my_map이라는 이름의 맵을 선언했습니다. 이 맵은 키 데이터 타입으로 문자열을, 값 데이터 타입으로 정수를 갖습니다.
회원 유형
멤버 함수는 다음 멤버 유형을 매개변수 또는 반환 유형으로 사용할 수 있습니다.
- 키 유형: 키(템플릿의 첫 번째 매개변수)
- 매핑_유형: T (템플릿의 두 번째 매개변수)
- 키_비교: (템플릿의 세 번째 매개변수를) 비교하세요.
- 할당자 유형: 할당(템플릿의 네 번째 매개변수)
- 값_유형: 쌍
- 값_비교: 요소 비교를 위한 중첩 함수 클래스
- 참고: allocator_type::참조
- const_reference: allocator_type::const_reference
- 포인터: allocator_type::포인터
- const_pointer: allocator_type::const_pointer
- 반복자: value_type에 대한 양방향 반복자
- const_iterator: const value_type에 대한 양방향 반복자
- reverse_iterator: 역방향 반복자
- const_reverse_iterator: 상수 역방향 반복자
- 차이_유형: ptrdiff_t
- 크기 유형: size_t
std::map의 내장 함수
std::map에는 내장 함수가 포함되어 있습니다. 이들 중 일부는 다음과 같습니다:
- 시작 () 이 함수는 맵의 첫 번째 항목에 대한 이터레이터를 반환합니다.
- 크기() 이 함수는 지도에 있는 항목의 개수를 반환합니다.
- 비어 있는() 이 함수는 맵이 비어 있는지 여부를 나타내는 부울 값을 반환합니다.
- 삽입(키, 값 쌍) 이 함수는 맵에 새로운 키-값 쌍을 삽입합니다.
- find(val) 이 함수는 val 요소가 발견되면 해당 요소의 이터레이터를 반환합니다. 그렇지 않으면 m.end()를 반환합니다.
- 지우기(반복자 위치) 이 함수는 이터레이터가 가리키는 위치의 항목을 삭제합니다.
- 지우기(const g) 이 함수는 맵에서 키-값 쌍 'g'를 삭제합니다.
- 맑은() 이 함수는 지도에서 모든 항목을 삭제합니다.
함수들이 정의되었으므로, 다음 예제들을 통해 이러한 함수들을 실제로 적용해 보겠습니다. 첫 번째 예제는 반복 작업입니다.
지도 요소 반복
지도 요소들을 순회할 수 있습니다. 이를 위해 이터레이터를 생성하고 사용하면 됩니다. 예를 들면 다음과 같습니다.
예제 1
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); cout << "Map size is: " << Students.size() << endl; cout << endl << "Default map Order is: " << endl; for (map<int, string>::iterator it = Students.begin(); it != Students.end(); ++it) { cout << (*it).first << ": " << (*it).second << endl; } }
출력:
다음은 코드의 스크린샷입니다.
Code 설명 :
- 해당 기능을 사용하려면 iostream 헤더 파일을 코드에 포함하세요.
- 해당 기능을 사용하려면 문자열 헤더 파일을 코드에 포함하세요.
- 해당 기능을 사용하려면 맵 헤더 파일을 코드에 포함하세요.
- 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
- main() 함수를 호출합니다. {는 함수 본문의 시작을 표시합니다.
- 키가 정수이고 값이 문자열인 Students라는 맵을 만듭니다.
- 맵 학생에 값을 삽입합니다. 키 200과 값 Alice가 맵에 삽입됩니다.
- 맵 학생에 값을 삽입합니다. 키 201과 값 John이 맵에 삽입됩니다.
- `size()` 함수를 사용하여 `Students`라는 이름의 맵 크기를 가져오세요. 이 함수는 2를 반환해야 합니다.
- 콘솔에 일부 텍스트를 인쇄합니다.
- for 루프를 사용하여 이름이 지정된 반복자를 생성하여 Students라는 지도 요소를 반복합니다.
- 콘솔에 맵 Students의 값을 인쇄합니다.
- for 루프 본문의 끝입니다.
- main() 함수 본문의 끝입니다.
std::map에 데이터 삽입
`insert()` 함수를 사용하여 `std::map`에 항목을 추가할 수 있습니다. `std::map`의 키는 고유해야 한다는 점을 기억하세요.
먼저 각 키가 맵에 존재하는지 확인합니다. 키가 존재하면 해당 항목은 삽입되지 않고 기존 항목의 이터레이터를 반환합니다. 키가 존재하지 않으면 항목이 삽입됩니다.
이 기능에는 다음과 같은 변형이 있습니다.
- 삽입(쌍) 이 변형에서는 키-값 쌍이 맵에 삽입됩니다.
- 삽입(시작_itr, 종료_itr) 이 변형을 사용하면 다른 맵의 start_itr 및 end_itr로 정의된 범위 내에 항목이 삽입됩니다.
insert_or_assign() 함수는 insert() 함수와 동일한 방식으로 작동하지만, 지정된 키가 맵에 이미 존재하는 경우 해당 값이 수정됩니다.
예제 2
#include <map> #include <iostream> using namespace std; int main() { map<int, int> m{ {1,3} , {2,4} , {3,5} }; m.insert({ 5, 6 }); m.insert({ 1, 8 }); m.insert_or_assign(1, 6); cout << "Key\tElement\n"; for (auto itr = m.begin(); itr != m.end(); ++itr) { cout << itr->first << '\t' << itr->second << '\n'; } return 0; }
출력:
다음은 코드의 스크린샷입니다.
Code 설명 :
- 해당 기능을 사용하려면 맵 헤더 파일을 코드에 포함하세요.
- 해당 기능을 사용하려면 iostream 헤더 파일을 코드에 포함하세요.
- 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
- main() 함수를 호출합니다. {는 함수 본문의 시작을 표시합니다.
- 키가 정수이고 값이 정수인 m이라는 맵을 만듭니다. 세 개의 항목이 지도에 작성되었습니다.
- 맵에 새 항목을 삽입합니다. m. 키 5와 값 6이 맵에 삽입됩니다.
- 이미 존재하는 키에 항목을 입력하려고 합니다. 키 1이 이미 맵에 존재하므로 항목이 작성되지 않습니다.
- insert_or_assign() 함수를 사용하여 기존 항목을 삽입하거나 수정합니다. 키 1이 이미 존재하므로 해당 값은 6으로 변경됩니다.
- 콘솔에 일부 텍스트를 인쇄합니다. "\t" 문자는 가로 공백을 만들고 "\n" 문자는 마우스 커서를 다음 줄로 이동합니다.
- 사용하십시오 for 루프 m이라는 맵의 요소를 반복하기 위해 itr이라는 이름의 반복자를 만듭니다.
- 콘솔에 맵 m의 값을 인쇄합니다. "\t" 문자는 각 키와 해당 값 사이에 수평 공백을 만듭니다. 반대로 "\n" 문자는 반복할 때마다 마우스 커서를 다음 줄로 이동합니다.
- for 루프 본문의 끝입니다.
- 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
- main() 함수 본문의 끝입니다.
지도에서 검색
`find()` 함수를 사용하면 키를 기준으로 맵의 요소를 검색할 수 있습니다. 키를 찾지 못하면 `std::map::end`를 반환하고, 찾으면 검색된 요소의 이터레이터를 반환합니다.
예제 3
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<int, string> Students; Students.insert(std::pair<int, string>(200, "Alice")); Students.insert(std::pair<int, string>(201, "John")); std::map<int, string>::iterator it = Students.find(201); if (it != Students.end()) { std::cout << endl << "Key 201 has the value: => "<< Students.find(201)->second << '\n'; } }
출력:
다음은 코드의 스크린샷입니다.
Code 설명 :
- 오류 없이 기능을 사용하려면 iostream 헤더 파일을 코드에 포함하십시오.
- 오류 없이 해당 기능을 사용하려면 문자열 헤더 파일을 코드에 포함하세요.
- 오류 없이 해당 기능을 사용하려면 맵 헤더 파일을 코드에 포함하세요.
- 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
- main() 함수를 호출하세요. { 는 main() 함수의 본문 시작을 나타냅니다.
- 키가 정수이고 값이 문자열인 Students라는 맵을 만듭니다.
- 맵 학생에 값을 삽입합니다. 키 200과 값 Alice가 맵에 삽입됩니다.
- 맵 학생에 값을 삽입합니다. 키 201과 값 John이 맵에 삽입됩니다.
- 201 키와 연관된 값을 찾으십시오.
- if 문을 사용하여 키 값이 발견되었는지 확인합니다.
- 콘솔의 일부 텍스트와 함께 키 값을 인쇄합니다.
- if 문의 본문 끝입니다.
- main() 함수 본문의 끝입니다.
지도에서 데이터 삭제
erase() 함수를 사용하면 맵에서 값을 삭제할 수 있습니다. 삭제할 요소를 가리키는 이터레이터를 생성한 다음, 이 이터레이터를 erase() 함수에 전달하면 됩니다.
예제 4
#include <iostream> #include <string> #include <map> using namespace std; int main() { map<std::string, int> my_map; my_map.insert(std::make_pair("cow", 1)); my_map.insert(std::make_pair("cat", 2)); my_map["lion"] = 3; map<std::string, int>::iterator it = my_map.find("cat"); my_map.erase(it); for (map<string, int>::iterator it = my_map.begin(); it != my_map.end(); ++it) cout << (*it).first << ": " << (*it).second << endl; return 0; }
출력:
다음은 코드의 스크린샷입니다.
Code 설명 :
- 해당 기능을 사용하려면 iostream 헤더 파일을 코드에 포함하세요.
- 해당 기능을 사용하려면 문자열 헤더 파일을 코드에 포함하세요.
- 해당 기능을 사용하려면 맵 헤더 파일을 코드에 포함하세요.
- 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
- main() 함수를 호출하세요. { 는 main() 함수의 본문 시작을 나타냅니다.
- 키가 문자열이고 값이 정수인 my_map이라는 맵을 만듭니다.
- my_map 맵에 값을 삽입합니다. Cow 키와 값 1이 맵에 삽입됩니다.
- my_map 맵에 값을 삽입합니다. Cat 키와 값 2가 맵에 삽입됩니다.
- 사자 키를 사용하여 my_map 맵에 값 3을 추가합니다.
- 키 고양이를 찾기 위해 my_map 맵을 반복하는 반복자를 만듭니다.
- 반복자가 가리키는 요소를 삭제합니다.
- 반복자를 사용하여 my_map 맵의 요소를 시작부터 끝까지 순회합니다.
- 콘솔에서 my_map 맵의 내용을 인쇄합니다.
- 프로그램은 성공적으로 완료되면 출력을 반환해야 합니다.
- main() 함수 본문의 끝입니다.






