Insert와 Emplace

둘 다 컨테이너에 데이터를 삽입 하는 행위이나 차이가 있습니다.

Insert로 삽입 시 Map의 경우 std::make_pair를 이용해야하며, emplace는 간단하게 삽입이 가능하며, 내부 동작 또한 다릅니다.

C++11 이상의 emplace 계열 함수는 객체 생성자의 인자들을 넘겨, 컨테이너 내부에서 생성 후 추가하는 방식을 사용하기에, 임시 객체를 아예 생기지 않게 하거나, 그 횟수를 줄일 수 있습니다.

map::insert

insert를 사용하면 key와 value의 pair를 삽입할 수 있습니다.

map<int,int> dic{};

dic.insert(std::make_pair(1,3));

map::emplace

insert와 비슷하지만 이쪽은 값을 key와 value의 생성자에 전송한 값을 구축합니다.

std::map<int,int> dic{};

dic.emplace(1,3); // dic.insert(std::make_pair(1,3))와 같다

Conclusion

map 뿐만 아니라 unordered_map, set, list, vector 등 구현되어 있습니다.

emplace는 코드가 간결해지기도 하고 성능상 이점이 있습니다.