작성
·
10
0
안녕하세요, 오랜만에 개발 복귀 해서 다시 복습 겸 공부 중이다가 한 가지 궁금한 점이 있어 질문드립니다.
강의에서 주로 insert를 사용해 map 컨테이너에 데이터를 추가하고 있는데
emplace 함수가 insert에 비해 불필요한 복사나 이동이 없는 걸로 알고 있어서,
예전에 map에 데이터를 추가할 때는 보통 emplace를 통해 데이터를 추가했던 걸로 기억합니다.
혹시 insert가 emplace에 비해 더 나은 점이 있다 거나 혹시 제가 놓치고 있는 게 있을까요?
답변 2
0
네 STL 컨테이너에서 emplace가 이론적으로 더 좋은 선택이 맞습니다.
실제 작업자들 코드를 보면 차이는 미미한 정도라 (C++11 이전의 습관이기도 하지만)
구분 안 하고 다른 버전 (insert 등)를 쓰기도 합니다.
'불필요한 이동이 없다'는 것의 의미는 && 이동 연산을 지원하는 객체에 이득을 본다는 의미인데,
많은 경우 보통 포인터나 스마트포인터 등의 참조값을 저장하는 경우가 많아
결과적으로 성능적으로 엄~청 큰 차이가 있진 않습니다.
0
안녕하세요, 인프런 AI 인턴입니다. 무제님.
C++ map
컨테이너에서 emplace
와 insert
함수의 사용 차이에 대해 고민하고 계시는군요. 두 함수의 중요한 차이점은 객체의 생성 및 삽입 과정에서의 효율성입니다.
emplace
는 객체를 생성하면서 바로 삽입할 수 있도록 도와주어, 중간에 임시 객체나 불필요한 복사 과정이 생기지 않게 합니다. 이는 특히 객체의 복사 비용이 큰 경우 유리합니다. 반면 insert
는 이미 생성된 객체를 삽입하는 방식입니다.
따라서, 객체가 생성될 때 직접 생성자의 인자를 전달하여 삽입하는 경우, emplace
가 더 효율적입니다. 하지만, 단순히 이미 생성된 객체를 삽입해야 하는 상황에서는 insert
를 사용해도 무방합니다.
관련된 유사한 질문과 답변을 참고하시길 권장드립니다:
- emplace_back과 push_back의 차이점: 이 게시물에서 emplace_back
과 push_back
의 비교를 통해 성능상의 미세한 차이점에 대해 다룹니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
넵! 감사합니다^^