unordered_map insert in C++ STL (original) (raw)

The **std::unordered_map::insert() in C++ STL is a built-in function used to insert a key-value pair in unordered_map container. As unordered maps only store unique elements, this function does not insert elements with duplicate keys. In this article, we will learn about std::unordered_map::insert() in C++.

**Example:

C++ `

// C++ program to illustrate the use of // unordered_map::insert() #include <bits/stdc++.h> using namespace std;

int main() { unordered_map<int, string> um;

// Insert single elements in random order
um.insert({1, "one"});

// Insert multiple elements
um.insert({{2, "two"}, {4, "four"}});

for (auto i : um)
    cout << i.first << ": " << i.second << '\n';
return 0;

}

`

Output

4: four 2: two 1: one

unordered_map::insert() Syntax

um._**insert({k, v}) // For single element_
um._**insert(pos, {k, v}) // For single element near pos_
um._**insert({ {k1, v1}, {k2, v2}, ….}); // For multiple elements_
um._**insert(first, last); // For range_

We can use these overloads for different ways to insert elements in std::map() in C++:

Table of Content

Insert a Single Element

**unordered_map::insert() method can be used to insert the single key value pair in std::unordered_map container.

**Syntax

um.**insert({_k, v});

**Parameters

**Return Value

Example

C++ `

// C++ program to insert a single element using // unordered_map::insert method #include <bits/stdc++.h> using namespace std;

int main() { unordered_map<int, string> um;

// Insert single elements one by one
um.insert({1, "one"});
um.insert({4, "four"});
um.insert({2, "two"});

// Trying to insert duplicate key
um.insert({2, "TWO"});

for (auto i : um)
    cout << i.first << '\t' << i.second << '\n';
return 0;

}

`

**Time Complexity: O(1) average, O(n) worst, where **n is the number of elements in unordered_map
**Auxiliary Space: O(1)

Insert Element Near Given Position

We can also use the unordered_map::insert() function to insert the key-value pair near the given position. The std::unordered_map are stored according to their hash codes. We cannot force the insertion at any particular position, so the given position only gives a hint to **unordered_map::insert() function.

**Syntax

um.**insert(_pos, {k, v});

**Parameters

**Return Value

Example

C++ `

// C++ program to insert a pair near some given // position using unordered_map::insert() #include <bits/stdc++.h> using namespace std;

int main() { unordered_map<int, string> um; um.insert({1, "one"}); um.insert({4, "four"});

// Finding the position to insert
auto it = um.find(4);

// Inserting {2, "two"} starting the search
// from position where 4 is present
um.insert(it, {2, "two"});

for (auto i : um)
    cout << i.first << '\t' << i.second << '\n';
return 0;

}

`

**Time Complexity: O(1) average, O(n) worst, where **n is the number of elements in unordered_map
**Auxiliary Space: O(1)

Insert Multiple Elements

We can also use the **std::unordered_map::insert() method to insert multiple elements at once using **initializer list.

Syntax

um._**insert({ {k1, v1}, {k2, v2}, …});_

**Parameters

**Return Value

Example

C++ `

// C++ program to insert multiple key-value pairs // using initializer list with unordered_map::insert() #include <bits/stdc++.h> using namespace std;

int main() { unordered_map<int, string> um;

// Insert multiple key-value pairs using
// initializer list
um.insert({{1, "one"}, {2, "two"}, {4, "four"}});

// Display the elements of the unordered_map
for (auto i : um)
    cout << i.first << '\t' << i.second << '\n';
return 0;

}

`

**Time Complexity: O(k) average, O(n * k) worst, where **n is the number of elements in unordered_map.
**Auxiliary Space: O(k), where **k is the number of elements to be inserted.

Insert Elements from Given Range

The **unordered_map::insert() function can also be used to insert elements from the given range. This range can by any STL container or an array.

**Syntax

um.**insert(_first, last);

**Parameters

**Return Value

Example

C++ `

// C++ program to insert multiple elements from // given range using unordered_map::insert() #include <bits/stdc++.h> using namespace std;

int main() { unordered_map<int, string> um;

// Vector of pairs to insert into unordered_map
vector<pair<int, string>> v = {{1, "one"},
                 {2, "two"}, {4, "four"}};

// Insert elements from the defined range
um.insert(v.begin(), v.end());
for (auto i : um)
    cout << i.first << '\t' << i.second << '\n';
return 0;

}

`

**Time Complexity: O(k) average, O(n * k) worst, where **n is the number of elements in unordered_map.
**Auxiliary Space: O(k), where **k is the number of elements to be inserted.