본문 바로가기
프로그래밍 언어/C++

[C++] [STL] Map

by 까망 하르방 2021. 2. 28.
반응형

Map 기본 연산

map의 원소는 pair 객체로 저장되며 pair 객체의 first 멤버 변수는 key로 second 멤버 변수는 value이다.

- map<key,value> : key와 value를 pair 형태로 선언

 

함수 목록

- begin() : beginning iterator 반환

- end() : end iterator 반환

- insert( make_pair(key,value) ): 맵에 원소를 pair 형태로 추가

- erase(key) : 맵에서 key에 해당하는 원소 삭제

- clear() : 맵의 원소들 모두 삭제

- find(key) : key(키값)에 해당하는 iterator를 반환

- count(key) : key(키값)에 해당하는 원소들(value들)의 개수를 반환

                        ※ map에서는 중복을 허용하지 않기 때문에 1 또는 0 반환

- empty() : 맵이 비어있으면 true 아니면 false를 반환

- size() : 맵 원소들의 수를 반환

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main(){

    map<string, int> m;

    // 추가
    m.insert(make_pair("a", 1));
    m.insert(make_pair("b", 2));
    m["c"] = 3;
    m.insert(make_pair("d", 4));

    // 삭제
    m.erase("b");
    m.erase(m.find("c"));

    // empty(), size()
    if(!m.empty())
        cout << "size: " << m.size() << endl;

    // key를 통해 value 찾기
    cout << "[a] value : " << m.find("a")->second << endl;

    // count(key)
    cout << "[a] count : " << m.count("a") << '\n';
    
    // 탐색
    map< string, int >::iterator it;
    for(it = m.begin(); it != m.end(); it++){
        cout << "key : " << it->first << " " << "value : " << it->second << '\n';
    }
}

 

map에 key가 존재여부 확인

: 단순히 확인만 하는 경우에는 find()보다는 count()가 좀 더 유연.

#include <iostream>
#include <map>
#include <string>
using namespace std;

typedef struct {
    string kor;
    int num;
}fruit;


int main(){

    map<string, fruit> m;

    fruit f1 = {"사과", 5};
    fruit f2 = {"오렌지", 3};
    m.insert(make_pair("apple", f1));
    m.insert(make_pair("orange", f2));
    
    // 바나나 존재 유무 확인
    // 찾지 못한다면 m.end()에 해당하는 iterator 반환
    if(m.find("banana") == m.end()){
    
        cout << "바나나 존재 X" << endl;
    }
    else{
        cout << "바나나 존재 O" << endl;
        cout << "바나나 개수: " << (m.find("banana")->second).num << endl;
    }

    // 사과 존재 유무 확인
    if(m.count("apple")){
        cout << "사과 존재 O" << endl;
        cout << "사과 개수: " << (m.find("apple")->second).num << endl;
    }
    else{
        cout << "사과 존재 X" << endl;
    }
}

 

Reference

[해시] Hash란?

[해시] Hash Chaining 기법 구현

[해시] Hash Open Address 기법 구현  

 

관련 문제

[BOJ] 2980 도로와 신호등

 

 

반응형

'프로그래밍 언어 > C++' 카테고리의 다른 글

[C++] 상속(inheritance)이란?  (0) 2021.07.04
[C++] lower_bound, upper_bound 사용해보기  (0) 2021.05.16
[C++] [STL] Stack  (0) 2021.02.28
[C++] [STL] Queue  (0) 2021.02.28
[C++] 기본 입출력  (0) 2021.02.28

댓글