c++데이터 구조 맵 의 사용 에 대한 상세 한 설명
map 는 맵 을 표시 합 니 다.모든 기본 형식(STL 용기 포함)을 기본 형식(STL 용기 포함)에 투사 할 수 있 습 니 다.예 를 들 어 int 에서 double,string 에서 int 까지 의 맵 등 을 만 들 수 있 습 니 다.
map 는 Python 사전 과 유사 한 1 대 1 hash 를 제공 합 니 다.
1.헤더 파일
2.정의
맵 은 다음 과 같 습 니 다.매개 변수의 첫 번 째 는 key 의 유형 이 고 두 번 째 는 value 의 유형 입 니 다.
map<typename1, typename2> mp;
[주의]문자열 에서 정형 까지 의 맵 이 라면 char 배열 을 사용 하지 않 고 string 을 사용 해 야 합 니 다.map 의 키 와 값 은 STL 용기 일 수도 있 습 니 다.예 를 들 어 set 용 기 를 문자열 에 표시 할 수도 있 습 니 다.
map<set<int>, string> mp;
3.map 용기 내 요소 접근(1)아래 표 시 를 통 해 접근
메모:맵 의 키 가 유일 합 니 다.
#include <iostream>
#include <map>
using namespace std;
int main(){
map<char, int> mp;
mp['c'] = 30;
cout << mp['c'] << endl;
return 0;
}
30(2)교체 기 를 통 해 접근
정의 교체 기:
map<typename1, typename2>::iterator it;
이렇게 하면 교체 기 it 를 얻 을 수 있 습 니 다.map 는 it->first 를 사용 하여 키 를 방문 하고 it->second 방문 값 을 사용 할 수 있 습 니 다.
#include <stdio.h>
#include <map>
using namespace std;
int main(){
map<char, int> mp;
mp['m'] = 20;
mp['r'] = 30;
mp['a'] = 40;
for(map<char, int>::iterator it = mp.begin(); it!=mp.end();it++){
printf("%c %d
", it->first, it->second);
}
return 0;
}
출력:a 40
m 20
r 30
[주의]맵 은 키 가 작 을 때 부터 큰 순서 로 자동 으로 정렬 됩 니 다.교체 기의 비 교 는<또는>를 사용 할 수 없고=또는!=만 사용 할 수 있 습 니 다.
(3)역방향 교체 기 를 통 해 접근
#include <stdio.h>
#include <map>
using namespace std;
int main(){
map<char, int> mp;
mp['m'] = 20;
mp['r'] = 30;
mp['a'] = 40;
for(map<char, int>::reverse_iterator it = mp.rbegin(); it!=mp.rend();it++){
printf("%c %d
", it->first, it->second);
}
return 0;
}
출력:r 30
m 20
a 40
rbegin()은 map 의 마지막 요 소 를 가리 키 고 rend()는 map 의 첫 번 째 요 소 를 가리 키 기 전에.
4.맵 요소 의 삽입
(1)insert+
map<int, string> mapStudent;
mapStudent.insert(pair<int, string>(1, "student_one"));
(2)insert+교체 기 를 통 해 삽입
map<int, string> mapStudent;
mapStudent.insert(map<int, string>::value_type (1, "student_one"));
(3)배열 방식 으로 삽입
map<int, string> mapStudent;
mapStudent[1] = "student_one";
[주의]첫 번 째,두 번 째 방법 은 완전히 등가 이지 만 세 번 째 방법 은 앞의 두 가지 와 차이 가 있다.맵 에 키 가 포함 되 어 있 으 면 첫 번 째,두 번 째 방법 은 삽입 에 실 패 했 고 세 번 째 방법 은 이전 키 값 을 덮어 씁 니 다.그래서 선후 로 같은 key 요 소 를 삽입 하면 첫 번 째,두 번 째 방법 은 첫 번 째 데 이 터 를 보류 하고 세 번 째 방법 은 마지막 으로 보류 합 니 다.5.map 상용 함수 인 스 턴 스 분석
(1)find()
find(key)반환 키 가 key 인 맵 의 교체 기 입 니 다.시간 복잡 도 는 O(logN)이 고 N 은 map 에 비 친 갯 수 입 니 다.
#include <stdio.h>
#include <map>
using namespace std;
int main(){
map<char, int> mp;
mp['a'] = 1;
mp['b'] = 2;
mp['c'] = 3;
map<char, int>::iterator it = mp.find('b');
printf("%c %d
", it->first, it->second);
return 0;
}
b 2(2)erase()
① 단일 요소 삭제
mp.erase(it):it 는 삭제 할 요소 의 교체 기 입 니 다.시간 복잡 도 는 O(1)입 니 다.
#include <stdio.h>
#include <map>
using namespace std;
int main(){
map<char, int> mp;
mp['a'] = 1;
mp['b'] = 2;
mp['c'] = 3;
map<char, int>::iterator it = mp.find('b');
mp.erase(it); // b 2
for(map<char, int>::iterator it = mp.begin(); it!=mp.end();it++){
printf("%c %d
", it->first, it->second);
}
return 0;
}
a 1c 3
mp.erase(key):key 는 맵 을 삭제 할 키 이 고 시간 복잡 도 는 O(logN)입 니 다.
#include <stdio.h>
#include <map>
using namespace std;
int main(){
map<char, int> mp;
mp['a'] = 1;
mp['b'] = 2;
mp['c'] = 3;
mp.erase('b'); // b 2
for(map<char, int>::iterator it = mp.begin(); it!=mp.end();it++){
printf("%c %d
", it->first, it->second);
}
return 0;
}
a 1c 3
② 한 구간 의 모든 요 소 를 삭제 합 니 다.
mp.erase(first,last):first 는 구간 의 시작 교체 기 를 삭제 해 야 합 니 다.last 는 삭제 해 야 할 구간 의 끝 교체 기의 다음 주 소 를 삭제 합 니 다.즉,왼쪽 닫 기 오른쪽 열 림 구간[first,last)의 모든 요 소 를 삭제 합 니 다.
#include <stdio.h>
#include <map>
using namespace std;
int main(){
map<char, int> mp;
mp['a'] = 1;
mp['b'] = 2;
mp['c'] = 3;
map<char, int>::iterator it = mp.find('b'); // it b
mp.erase(it, mp.end()); // it
for(map<char, int>::iterator it = mp.begin(); it!=mp.end();it++){
printf("%c %d
", it->first, it->second);
}
return 0;
}
a 1(3)size()
size():맵 에 비 친 대 수 를 가 져 옵 니 다.시간 복잡 도 는 O(1)입 니 다.
#include <stdio.h>
#include <map>
using namespace std;
int main(){
map<char, int> mp;
mp['a'] = 10;
mp['b'] = 20;
mp['c'] = 30;
printf("%d
", mp.size()); // 3
return 0;
}
(4)count()count():맵 에 대응 하 는 키 의 개 수 를 되 돌려 줍 니 다.맵 에 같은 키 가 최대 하나 밖 에 없 기 때문에 count()의 결 과 는 0 또는 1 밖 에 되 지 않 습 니 다.
#include <iostream>
#include <map>
int main (){
std::map<char,int> mymap;
char c;
mymap ['a']=101;
mymap ['c']=202;
mymap ['d']=303;
for (c='a'; c<'e'; c++){
std::cout << c;
if (mymap.count(c)>0)
std::cout << " is an element of mymap.
";
else
std::cout << " is not an element of mymap.
";
}
return 0;
}
결과:a is an element of mymap.
b is not an element of mymap.
c is an element of mymap.
d is an element of mymap.
(5)clear()
clear():맵 을 비 우 는 데 사 용 됩 니 다.맵 은 초기 빈 상태 로 변 합 니 다.
(6)empty()
empty():맵 이 비어 있 는 지 판단 하고 맵 이 비어 있 으 면 true 로 돌아 갑 니 다.그렇지 않 으 면 false 로 돌아 갑 니 다.
(7)lower_bound() 、upper_bound()
lower_bound():키 값 을 되 돌려 줍 니 다>=주어진 요소 의 첫 번 째 위치 입 니 다.즉,키 의 유형 을 비교 할 수 있다 면 2 분 으로 찾 을 수 있 는 방법 으로 되 돌아 오 는 유형 은 교체 기 입 니 다.upper_bound():키 값>주어진 요소 의 첫 번 째 위 치 를 되 돌려 줍 니 다.즉,키 의 유형 을 비교 할 수 있다 면 2 분 으로 찾 을 수 있 는 방법 으로 되 돌아 오 는 유형 은 교체 기 입 니 다.
map<int, string> mapStudent;
mapStudent[1] = "student_one";
mapStudent[3] = "student_three";
mapStudent[5] = "student_five";
map<int, string>::iterator iter;
iter = mapStudent.lower_bound(2); // 3 ;
iter = mapStudent.upper_bound(2); // 3
이상 은 c++데이터 구조 맵 의 사용 에 대한 상세 한 내용 입 니 다.c+데이터 구조 맵 의 사용 에 관 한 자 료 는 다른 관련 글 에 주목 하 십시오!이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
hdu 1717 소수 화 점수 2 (수학)소수 화 점수 2 레이 는 수학 시간 에 선생님 의 말씀 을 듣 고 모든 소수 가 점수 로 표시 되 는 형식 이 라 고 말 했다. 그 는 녹 기 시 작 했 고 곧 완성 되 었 다. 그러나 그 는 또 하나의 문 제 를...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.