지도 위치 C++ 표준 템플릿 라이브러리(STL)
지도란 무엇인가요? C++? 통사론
In C++은 MAP 매핑된 형식으로 항목을 저장하는 연관 컨테이너입니다. 맵의 각 항목은 키-값과 매핑된 값으로 구성됩니다. 매핑된 두 값은 동일한 키 값을 공유할 수 없습니다.
키 값은 요소를 고유하게 정렬하고 식별하는 데 유용합니다. 매핑된 값은 키와 관련된 콘텐츠를 저장하기 위한 것입니다. 둘은 유형이 다를 수 있으나, 멤버형은 둘을 합친 페어형을 통해 결합한다.
std::map을 사용하는 이유는 무엇입니까?
지도를 사용하는 이유는 다음과 같습니다.
- std:: 지도는 선택한 정렬 기준에 따라 정렬된 순서로만 고유 키를 저장합니다.
- 키를 사용하여 요소를 검색하는 것이 쉽고 빠릅니다.
- 각 키에는 하나의 요소만 연결됩니다.
- std::map은 연관 배열로 사용할 수 있습니다.
- std::map은 이진 트리(균형)를 사용하여 구현 가능합니다.
통사론
std::map을 선언하려면 다음 구문을 사용하세요.
std::map<key_datatype, value_datatype>map_name;
- 이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는
key_datatype
맵 키의 데이터 유형을 나타냅니다. - 이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는
value_datatype
맵 키에 해당하는 값의 데이터 유형을 나타냅니다. - 이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는
map_name
지도의 이름입니다.
예 :
map<string, int> my_map;
우리는 이름이 붙은 지도를 선언했습니다. my_map
. 지도에는 다음과 같은 문자열이 있습니다. 키 데이터 유형 및 정수 값 데이터 형식.
회원 유형
멤버 함수는 다음 멤버 유형을 매개변수 또는 반환 유형으로 사용할 수 있습니다.
- 키 유형: 키(템플릿의 첫 번째 매개변수)
- 매핑_유형: T(템플릿의 두 번째 매개변수)
- 키_비교: 비교(템플릿의 세 번째 매개변수)
- 할당자 유형: Alloc(템플릿의 네 번째 매개변수)
- 값_유형: 쌍
- 값_비교: 요소 비교를 위한 중첩 함수 클래스
- 참고: 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에는 내장 함수가 포함되어 있습니다. 이들 중 일부는 다음과 같습니다:
- 시작하다() - 이 함수는 맵의 첫 번째 항목에 대한 반복자를 반환합니다.
- 크기() –이 함수는 지도의 항목 수를 반환합니다.
- 비어 있는() -이 함수는 지도가 비어 있는지 여부를 나타내는 부울 값을 반환합니다.
- insert( 쌍(키, 값)) – 이 함수는 새로운 키-값 쌍을 맵에 삽입합니다.
- 찾기(발) - 이 함수는 발견되면 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; } }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 해당 기능을 사용하려면 iostream 헤더 파일을 코드에 포함하세요.
- 해당 기능을 사용하려면 문자열 헤더 파일을 코드에 포함하세요.
- 해당 기능을 사용하려면 맵 헤더 파일을 코드에 포함하세요.
- 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
- 전화
main()
기능. {는 함수 본문의 시작을 표시합니다. - 키가 정수이고 값이 문자열인 Students라는 맵을 만듭니다.
- 맵 학생에 값을 삽입합니다. 키 200과 값 Alice가 맵에 삽입됩니다.
- 맵 학생에 값을 삽입합니다. 키 201과 값 John이 맵에 삽입됩니다.
- 사용
size()
Students라는 지도의 크기를 가져오는 함수입니다. 그러면 2가 반환됩니다. - 콘솔에 일부 텍스트를 인쇄합니다.
- for 루프를 사용하여 이름이 지정된 반복자를 생성하여 Students라는 지도 요소를 반복합니다.
- 콘솔에 맵 Students의 값을 인쇄합니다.
- for 루프 본문의 끝입니다.
- 본체의 끝
main()
기능.
std::map에 데이터 삽입
다음을 사용하여 std::map에 항목을 입력할 수 있습니다. insert()
기능. std::map 키는 고유해야 한다는 점을 기억하세요.
따라서 먼저 각 키가 맵에 존재하는지 확인합니다. 존재하는 경우 항목은 삽입되지 않지만 기존 항목에 대한 반복자를 반환합니다. 존재하지 않는 경우 항목이 삽입됩니다.
이 기능에는 다음과 같은 변형이 있습니다.
- 삽입(쌍) – 이 변형을 사용하면 키-값 쌍이 맵에 삽입됩니다.
- 삽입(start_itr, end_itr) – 이 변형을 사용하면 다른 맵의 start_itr 및 end_itr에 의해 정의된 범위 내에 항목이 삽입됩니다.
이 어플리케이션에는 XNUMXµm 및 XNUMXµm 파장에서 최대 XNUMXW의 평균 출력을 제공하는 insert_or_assing() 기능은 다음과 같은 방식으로 작동합니다. 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; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 해당 기능을 사용하려면 맵 헤더 파일을 코드에 포함하세요.
- 해당 기능을 사용하려면 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'; } }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 오류 없이 기능을 사용하려면 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; }
출력:
다음은 코드의 스크린샷입니다.
코드 설명 :
- 해당 기능을 사용하려면 iostream 헤더 파일을 코드에 포함하세요.
- 해당 기능을 사용하려면 문자열 헤더 파일을 코드에 포함하세요.
- 해당 기능을 사용하려면 맵 헤더 파일을 코드에 포함하세요.
- 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
- 전화
main()
기능. {는 본문의 시작을 표시합니다.main()
기능. - 키가 문자열이고 값이 정수인 my_map이라는 맵을 만듭니다.
- my_map 맵에 값을 삽입합니다. Cow 키와 값 1이 맵에 삽입됩니다.
- my_map 맵에 값을 삽입합니다. Cat 키와 값 2가 맵에 삽입됩니다.
- 사자 키를 사용하여 my_map 맵에 값 3을 추가합니다.
- 키 고양이를 찾기 위해 my_map 맵을 반복하는 반복자를 만듭니다.
- 반복자가 가리키는 요소를 삭제합니다.
- 반복자를 사용하여 my_map 맵의 요소를 처음부터 끝까지 반복합니다.
- 콘솔에서 my_map 맵의 내용을 인쇄합니다.
- 프로그램은 성공적으로 완료되면 출력을 반환해야 합니다.
- 본체의 끝
main()
기능.
요약
- 맵은 항목을 매핑된 형식으로 저장하는 연관 컨테이너입니다.
- 맵의 각 항목에는 키 값과 매핑된 값이 있습니다.
- 맵에서 매핑된 두 값은 키 값을 공유할 수 없습니다.
- 키 값은 요소를 고유하게 정렬하고 식별하는 데 도움이 됩니다.
- 매핑된 값은 키와 관련된 콘텐츠를 저장하는 데 도움이 됩니다.
- C++ 맵은 고유 키를 정렬된 순서로 저장합니다.
- 함께 일하기 C++ 맵에서 요소를 반복하는 반복자를 만듭니다.
- 반복자를 사용하면 맵에서 항목을 검색하고 삭제하는 등의 작업을 수행할 수 있습니다.