- 질문 게시판입니다.
Date 19/10/03 22:00:24
Name   kaestro
Subject   c++ 에서 unordered map을 pair를 key로 사용할 때 순회
문제가 지도상에 상하좌우로 증식하는 세포가 주어질 때[맵의 크기 제한 없이] 일정 시간이 지난 후 살아있는 세포의 수를 세는 문제를 풀고 있는데,

솔루션에서는 문제 상에서 숫자 제약조건 때문에 나올 수 있는 최대보다 큰 배열을 이용해서 문제를 해결했는데, 저는 실제로 map 자료구조를 이용해서 문제를 풀어보고 싶어 그렇게 문제를 풀었습니다.

c++ map을 써서 돌아가는 코드는 만들었는데, 크기가 커지면 시간 제약 조건을 통과하지 못해서, 그럼 unordered map을 쓰면 되지 않을까? 하는 생각에 unordered_map으로 자료구조를 바꿨는데 지금 insert를 하고 나서 순회를 하면 문제가 생기더라구요.

아래 코드에서 simulation에서 iterator가 breeding을 하고 나면, 저장되어있는 simulation의 구조가 변형이 되면서 아직 순회해야하는 세포는 건너뛰거나, 아까전에 순회했던 세포를 재차 순회하는 문제가 발생하고 있습니다.

이 문제를 해결하려고 map을 따로 copy 뜨는 식으로 문제도 풀어봤는데, 이건 map을 copy하는게 오래 걸려서 그런지 기존의 map을 이용한 풀이보다 속도가 떨어지더라구요.

이런 경우에 unordered_map에 새로운 노드를 추가하면서, 아직 순회하지 않은 노드를 순회하고, 기존의 unordered_map을 카피하지 않는 방법이 있을까요?

감사합니다.

void simulate() {
    for (int i = 0; i < timeLimit; ++i) {
        for (myMap::iterator it = simulation.begin(); it != simulation.end();++it) {
          if (it->second.active == DEAD || it->second.lifetime == -1) continue;
          if (it->second.active == ACTIVE) {
                const ii& pos = it->first;
                const StemCell& sc = it->second;
                breed(pos, sc);
                it = simulation.find(pos);
            }
        }

        for (myMap::iterator it = simulation.begin(); it != simulation.end(); ++it) {
            it->second.increment();
        }
    }
}

void breed(const ii& pos, const StemCell& st) {
    for (int d = 0; d < direction.size(); ++d) {
        ii nextPos = { pos.first + direction[d].first, pos.second + direction[d].second };
        myMap::iterator it = simulation.find(nextPos);
      if (it == simulation.end()) {
            simulation[nextPos] = StemCell(-1, st.healthPoint);
        } else if (it->second.lifetime == -1){
          if (it->second.healthPoint < st.healthPoint) {
            it->second.healthPoint = st.healthPoint;
            }
        }
    }
}

ps. 전에 이런 질문 올렸을 때 코드 전문을 올려달라 하신 분이 계셨어서, 링크를 달아 둡니다.
(stl map 사용) https://github.com/kaestro/algorithms/blob/master/swexpert%20academy/5653.cpp
(stl unorderd_map 사용) https://github.com/kaestro/algorithms/blob/master/swexpert%20academy/5653_unordered.cpp



0


목록
번호 제목 이름 날짜 조회 추천
3566 문화/예술영화추천좀 부탁드립니다.. 18 알료사 17/10/25 4187 0
11970 의료/건강잘때마다 호롤로로롤이 벌떡 일어나 계속 단단해진 채로 잠들면 14 둥그란인생 21/07/31 4186 0
5278 기타아파트 의사결정이나 동의서 웹이나 모바일로 진행 10 CIMPLE 18/08/17 4186 0
13409 문화/예술감명 깊게 본 컨텐츠가 있으신가요? 81 Ye 22/05/25 4185 0
2382 체육/스포츠리커브보우를 쏠 때 활을 입에 대는 이유가 뭘까요? 4 수박이두통에게보린 17/02/22 4185 0
919 IT/컴퓨터플레이스테이션4 구매관련 질문 드립니다. 4 솔지은 16/03/15 4185 0
8462 의료/건강유아에게 2달여간 실온에 묵혀둔 냉장 보관 항생제를 먹였는데 괜찮을까요? 7 아재 19/12/13 4184 0
5815 IT/컴퓨터파워포인트 급질문 - 잠금장치 4 풀잎 18/11/03 4183 0
508 기타이거 머가 문제일까요??.jpg 2 김치찌개 15/11/19 4183 0
7772 홍차넷랍상 소우총 추천해 주십시오. 5 맥주만땅 19/08/30 4180 0
4239 IT/컴퓨터HEIC 화일 관리 어떻게 하시나요. 3 맥주만땅 18/03/05 4180 0
13281 연애결혼을 염두에 둔 만남 중에서 저와 저의 부모님간의 갈등.. 5 [익명] 22/04/22 4179 0
7974 IT/컴퓨터c++ 에서 unordered map을 pair를 key로 사용할 때 순회 7 kaestro 19/10/03 4179 0
4128 기타2년간 정신과 시간의 방을 추천해주세요. 상품있... 64 CONTAXS2 18/02/09 4179 0
941 의료/건강혹시 경북대 칠곡 장례식장 주차장 말고는 근처에 공짜로 주차할데가 없나요?? 7 하니남편 16/03/23 4178 0
5899 가정/육아혹시 진심 맘카페 하시는분들 계시나요?? 22 사나남편 18/11/16 4177 0
12925 여행서울 스파 호텔(~30만원) 9 인생호의 선장 22/02/03 4176 0
12916 기타건강하고 살안(덜)찌는 소주 안주는 뭐가 있을까요? 20 인생은자전거 22/02/01 4176 0
1256 기타저가형 시계 추천 부탁드립니다. 6 레이드 16/07/03 4176 0
3941 기타카드 할부 후 일부물품 취소하면 결재가 어떻게 되나요? 2 로보카로이 18/01/04 4175 0
3460 여행즉흥적인 서울 나들이, 팁 부탁드립니다. 18 Homo_Skeptic 17/10/04 4175 0
2231 기타쇼핑, 이 드레스 사까마까 사까마까.. 53 은머리 17/02/02 4175 0
1569 진로한국 취업을 위해서 준비할 것들이 뭐가 있을까요? 62 elanor 16/09/27 4175 0
314 여행서울 근교 한나절 코스로 다녀올만한 곳 14 난커피가더좋아 15/09/24 4174 0
11034 게임모바일 fm2021 재밌게 즐기는 방법 없을까요. 2 치토스순한맛 21/02/15 4173 0
목록

+ : 최근 2시간내에 달린 댓글
+ : 최근 4시간내에 달린 댓글

댓글