• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

multimap 질문

22.06.29 09:12 작성 조회수 192

0

총알 생성시 초기화를 진행 후multimap<Mybullet*, vec2> _map 변수에 insert

추후 update에서 for문을 이용 _map안의 second(총알의 위치)의 값을 증가된 값으로 변경

for문을 이용하여 iterator에 begin~end()값을 순찰

if문으로 현재의 iter->second(총알의 위치) 값의 좌표를 파악하여 총알 삭제

이런 느낌으로 접근 중인데 삭제를 하려고 하면 메모리 범위를 벗어났다고 하네요

혹시 제가 map을 잘못 생각하고 사용하고 있는건가요?

_map의 size()를 확인할 시에는 분명 총알을 발사할 때마다 size가 늘어나는걸 확인 했음에도 계획대로 되지 않아 질문드립니다

이 코드의 경우 vector를 사용하기에는 빈번하게 추가 삭제가 일어나서 제외하고 multimap을 사용하려고 해봤는데 이런식의 접근이 맞는건가요?

 

아래는 작성 코드입니다

if (isKeyPressedAndReleased(GLFW_KEY_SPACE))

{

bullet = new MyBullet;

bullet->center = tank.center;

bullet->center.x += 0.2f;

bullet->center.y += 0.1f;

bullet->velocity = vec2(2.0f, 0.0f);

 

_map.insert(std::pair<MyBullet*,vec2>(bullet, bullet->center));

}

 

if (!_map.empty())

{

for (std::multimap<MyBullet*, vec2>::iterator iter = _map.begin(); iter != _map.end(); ++iter)

{

iter->first->update(getTimeStep());

iter->second = iter->first->center;

 

 if (iter->second.x > 1.3f) _map.erase(iter);

 

}

}

 

if(!_map.empty())

{

for (std::multimap<MyBullet*, vec2>::iterator iter = _map.begin(); iter != _map.end(); ++iter)

{

iter->first->draw();

}

}

답변 2

·

답변을 작성해보세요.

0

이 코드의 경우 vector를 사용하기에는 빈번하게 추가 삭제가 일어나서 제외하고 multimap을 사용하려고 해봤는데 이런식의 접근이 맞는건가요?

-> 자료구조를 여러가지로 테스트 해보시는 것은 공부 삼아서 좋은 일입니다. 그러나 매 프레임마다 모든 요소(element)들을 사용하는 경우에는 multimap을 사용하는 것은 비효율적입니다. multimap은 저장된 element들 중 일부만을 빠르게 찾을 때 사용하지만 vector의 indexing보다는 느립니다. 더 자세한 내용은 자료구조에서 공부를 하셔야할 것 같습니다.

 

STL 사용법은 이 강의의 범위가 아니지만 효율성을 떠나서 multimap으로 마저 완성해보시는 것도 좋은 연습이라고 생각합니다.

 

0

강민철님의 프로필

강민철

2022.06.30

안녕하세요,

작성하신 전체 코드(솔루션 파일)을 tegongkang@gmail.com 으로 보내주시면

자세히 답변드리겠습니다.

감사합니다.