c++데이터 구조 맵 의 사용 에 대한 상세 한 설명

map
map 는 맵 을 표시 합 니 다.모든 기본 형식(STL 용기 포함)을 기본 형식(STL 용기 포함)에 투사 할 수 있 습 니 다.예 를 들 어 int 에서 double,string 에서 int 까지 의 맵 등 을 만 들 수 있 습 니 다.
map 는 Python 사전 과 유사 한 1 대 1 hash 를 제공 합 니 다.
  • 첫 번 째 키(key)라 고 하 는데 모든 키 워드 는 map 에서 한 번 만 나타 날 수 있 습 니 다
  • 4.567917.두 번 째 키 의 값(value)이 라 고 합 니 다.
    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 1
    c 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 1
    c 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+데이터 구조 맵 의 사용 에 관 한 자 료 는 다른 관련 글 에 주목 하 십시오!

    좋은 웹페이지 즐겨찾기