MAP : 연관 컨테이너, 노드 컨테이너

  • Set에 key와 더불러 value의 쌍으로 저장한다. (key,value)
  • Set처럼 중복된 key를 중복해서 저장 할수가 없다, 할라면 mutilMap를 사용해야 한다.
  • []연산자를 통해서, 추가 또는 갱신이 가능하다

* map <키,값> m; 은 * m[키] = 값;

  • 연관컨테이너 에서 찾기 관련 멤버 함수는 key룰 찾을 때 == 를 사용하지 않음
  • 컨테이너의 정렬 기준 조건자를 이용해 찾기 연산을 수행한다.

insert()

  • set처럼 저장위치(iter)와 삽입성공여부(bool)을 반환한다.
 std::map<int,float> myHouse;

    auto result = myHouse.insert(std::make_pair(3,3.3f));   //TRUE
    myitor = myHouse.insert(std::make_pair(2,2.2f));    //TRUE
    result = myHouse.insert(std::make_pair(1,1.1f));    //TRUE
    result = myHouse.insert(std::make_pair(3,5.5f));    //FALSE 이미 있는 값으로 안들어간다.

 

MutilSET : 연관 컨테이너, 노드 컨테이너

  • Map과 달리 중복된 값(key)이 삽입된다. 키는 상관 없음
  • 중복 저장될 수 있기 떄문에, set같이 bool값을 반환하는 pair객체가 아닌, 저장된 위치만을 가리키는 반복자를 반환한다.
  • [] 연산자를 제공하지 않는다.

순회 샘플

    std::multimap<int, int> mm;
    std::multimap<int, int>::iterator mmitor;
    mm.insert(std::pair<int, int>(60, 6));
    mm.insert(std::pair<int, int>(30, 3));
    mm.insert(std::pair<int, int>(70, 7));
    mm.insert(std::pair<int, int>(90, 9));
    mm.insert(std::pair<int, int>(40, 4));
    mm.insert(std::pair<int, int>(20, 2));
    mm.insert(std::pair<int, int>(50, 5));
    mm.insert(std::pair<int, int>(80, 8));

    for (mmitor = mm.begin(); mmitor != mm.end(); mmitor++)
    {
        cout << mmitor->first <<", " << mmitor->second << endl; //키  20부터 ~80 , 값 2~8
    }

lower_bound(), upper_bound(), equal_range()

  • 중복 키를 검색 할수 있는 함수
  • 연관컨테이너는 모두 사용 가능
  • equal_range() 앞 lower_bound(), 뒤는 upper_bound()

샘플

    std::multimap<int, int> mm;
    std::multimap<int, int>::iterator mmitor;

    mm.insert(std::pair<int, int>(60, 6));
    mm.insert(std::pair<int, int>(30, 3));
    mm.insert(std::pair<int, int>(70, 7));
    mm.insert(std::pair<int, int>(90, 9));
    mm.insert(std::pair<int, int>(40, 4));
    mm.insert(std::pair<int, int>(30, 2));
    mm.insert(std::pair<int, int>(50, 5));
    mm.insert(std::pair<int, int>(80, 8));

  auto itorequal = mm.equal_range(30);                                        //30,3  40,4 로 들어감
  auto  low =mm.lower_bound(30);  // low bound는 30,3
    auto  upp =mm.upper_bound(30); // upper_bound 는 40,4

    for (mmitor = itorequal.first; mmitor != itorequal.second; mmitor++)  //위 범위를 순위해서 출력하는 것
    {
        cout << mmitor->first << ", " << mmitor->second << endl;          // (30,3) , (30,2) 출력
    }

'프로그래밍 > STL' 카테고리의 다른 글

HashMap  (0) 2019.04.30
Set / MutilSet  (0) 2019.04.30
LIST  (0) 2019.04.30
DEQUE  (0) 2019.04.30
VECTOR  (0) 2019.04.30

+ Recent posts