How do I use emplace vs push with std::unordered_set?

In C++, the std::unordered_set is a collection of unique elements that allows for fast retrieval based on hashing. When inserting elements, you can use either emplace or push methods. Understanding the differences between these methods is essential for efficient coding.

push method is generally used for containers like std::vector or std::deque, while emplace constructs an object in place. For std::unordered_set, you'll typically use emplace to construct the element directly within the container, reducing unnecessary copies and improving performance.

Here’s an example to illustrate the usage:

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<std::string> mySet;

    // Using emplace to insert
    mySet.emplace("Example1");
    mySet.emplace("Example2");

    // Displaying the elements
    for (const auto& elem : mySet) {
        std::cout << elem << std::endl;
    }
    
    return 0;
}
    

C++ unordered_set emplace push performance