지도 위치 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;
	}
}

출력:

지도 요소 반복

다음은 코드의 스크린샷입니다.

지도 요소 반복

코드 설명 :

  1. 해당 기능을 사용하려면 iostream 헤더 파일을 코드에 포함하세요.
  2. 해당 기능을 사용하려면 문자열 헤더 파일을 코드에 포함하세요.
  3. 해당 기능을 사용하려면 맵 헤더 파일을 코드에 포함하세요.
  4. 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
  5. 전화 main() 기능. {는 함수 본문의 시작을 표시합니다.
  6. 키가 정수이고 값이 문자열인 Students라는 맵을 만듭니다.
  7. 맵 학생에 값을 삽입합니다. 키 200과 값 Alice가 맵에 삽입됩니다.
  8. 맵 학생에 값을 삽입합니다. 키 201과 값 John이 맵에 삽입됩니다.
  9. 사용 size() Students라는 지도의 크기를 가져오는 함수입니다. 그러면 2가 반환됩니다.
  10. 콘솔에 일부 텍스트를 인쇄합니다.
  11. for 루프를 사용하여 이름이 지정된 반복자를 생성하여 Students라는 지도 요소를 반복합니다.
  12. 콘솔에 맵 Students의 값을 인쇄합니다.
  13. for 루프 본문의 끝입니다.
  14. 본체의 끝 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;
}

출력:

std::map에 데이터 삽입

다음은 코드의 스크린샷입니다.

std::map에 데이터 삽입

코드 설명 :

  1. 해당 기능을 사용하려면 맵 헤더 파일을 코드에 포함하세요.
  2. 해당 기능을 사용하려면 iostream 헤더 파일을 코드에 포함하세요.
  3. 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
  4. 전화 main() 기능. {는 함수 본문의 시작을 표시합니다.
  5. 키가 정수이고 값이 정수인 m이라는 맵을 만듭니다. 세 개의 항목이 지도에 작성되었습니다.
  6. 맵에 새 항목을 삽입합니다. m. 키 5와 값 6이 맵에 삽입됩니다.
  7. 이미 존재하는 키에 항목을 입력하려고 합니다. 키 1이 이미 맵에 존재하므로 항목이 작성되지 않습니다.
  8. 사용법 - insert_or_assign() 기존 항목을 삽입하거나 수정하는 기능입니다. 키 1이 이미 존재하므로 해당 값은 6으로 변경됩니다.
  9. 콘솔에 일부 텍스트를 인쇄합니다. "\t" 문자는 가로 공백을 만들고 "\n" 문자는 마우스 커서를 다음 줄로 이동합니다.
  10. 사용하십시오 for 루프 m이라는 맵의 요소를 반복하기 위해 itr이라는 이름의 반복자를 만듭니다.
  11. 콘솔에 맵 m의 값을 인쇄합니다. "\t" 문자는 각 키와 해당 값 사이에 수평 공백을 만듭니다. 반대로 "\n" 문자는 반복할 때마다 마우스 커서를 다음 줄로 이동합니다.
  12. for 루프 본문의 끝입니다.
  13. 프로그램은 성공적으로 완료되면 값을 반환해야 합니다.
  14. 본체의 끝 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';
	}
}

출력:

지도에서 검색

다음은 코드의 스크린샷입니다.

지도에서 검색

코드 설명 :

  1. 오류 없이 기능을 사용하려면 iostream 헤더 파일을 코드에 포함하십시오.
  2. 오류 없이 해당 기능을 사용하려면 문자열 헤더 파일을 코드에 포함하세요.
  3. 오류 없이 해당 기능을 사용하려면 맵 헤더 파일을 코드에 포함하세요.
  4. 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
  5. 전화 main() 기능. {는 본문의 시작을 표시합니다. main() 기능.
  6. 키가 정수이고 값이 문자열인 Students라는 맵을 만듭니다.
  7. 맵 학생에 값을 삽입합니다. 키 200과 값 Alice가 맵에 삽입됩니다.
  8. 맵 학생에 값을 삽입합니다. 키 201과 값 John이 맵에 삽입됩니다.
  9. 201 키와 연관된 값을 찾으십시오.
  10. if 문을 사용하여 키 값이 발견되었는지 확인합니다.
  11. 콘솔의 일부 텍스트와 함께 키 값을 인쇄합니다.
  12. if 문의 본문 끝입니다.
  13. 본체의 끝 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;
}

출력:

지도에서 데이터 삭제

다음은 코드의 스크린샷입니다.

지도에서 데이터 삭제

코드 설명 :

  1. 해당 기능을 사용하려면 iostream 헤더 파일을 코드에 포함하세요.
  2. 해당 기능을 사용하려면 문자열 헤더 파일을 코드에 포함하세요.
  3. 해당 기능을 사용하려면 맵 헤더 파일을 코드에 포함하세요.
  4. 클래스를 호출하지 않고 사용하려면 코드에 std 네임스페이스를 포함하세요.
  5. 전화 main() 기능. {는 본문의 시작을 표시합니다. main() 기능.
  6. 키가 문자열이고 값이 정수인 my_map이라는 맵을 만듭니다.
  7. my_map 맵에 값을 삽입합니다. Cow 키와 값 1이 맵에 삽입됩니다.
  8. my_map 맵에 값을 삽입합니다. Cat 키와 값 2가 맵에 삽입됩니다.
  9. 사자 키를 사용하여 my_map 맵에 값 3을 추가합니다.
  10. 키 고양이를 찾기 위해 my_map 맵을 반복하는 반복자를 만듭니다.
  11. 반복자가 가리키는 요소를 삭제합니다.
  12. 반복자를 사용하여 my_map 맵의 요소를 처음부터 끝까지 반복합니다.
  13. 콘솔에서 my_map 맵의 내용을 인쇄합니다.
  14. 프로그램은 성공적으로 완료되면 출력을 반환해야 합니다.
  15. 본체의 끝 main() 기능.

요약

  • 맵은 항목을 매핑된 형식으로 저장하는 연관 컨테이너입니다.
  • 맵의 각 항목에는 키 값과 매핑된 값이 있습니다.
  • 맵에서 매핑된 두 값은 키 값을 공유할 수 없습니다.
  • 키 값은 요소를 고유하게 정렬하고 식별하는 데 도움이 됩니다.
  • 매핑된 값은 키와 관련된 콘텐츠를 저장하는 데 도움이 됩니다.
  • C++ 맵은 고유 키를 정렬된 순서로 저장합니다.
  • 함께 일하기 C++ 맵에서 요소를 반복하는 반복자를 만듭니다.
  • 반복자를 사용하면 맵에서 항목을 검색하고 삭제하는 등의 작업을 수행할 수 있습니다.