Swiftorial Logo
Home
Swift Lessons
Tutorials
Learn More
Career
Resources

STL Containers Tutorial

Introduction to STL Containers

The Standard Template Library (STL) in C++ provides a set of common classes for data structures and algorithms. STL containers are the collection of objects used to manage collections of data in a structured way. They provide a way to store and manipulate data efficiently and conveniently.

Types of STL Containers

STL containers are broadly categorized into three types:

  • Sequence Containers
  • Associative Containers
  • Unordered Containers

Sequence Containers

Sequence containers store data in a linear fashion. Common sequence containers are:

  • vector - Dynamic array
  • deque - Double-ended queue
  • list - Doubly linked list

Vector

The vector is a dynamic array that provides random access to elements. It can grow and shrink in size dynamically.

Example:

#include <iostream>
#include <vector>

int main() {
    std::vector<int> v = {1, 2, 3, 4, 5};
    for(int i : v) {
        std::cout << i << " ";
    }
    return 0;
}
                
Output: 1 2 3 4 5

Deque

Deque (Double-ended queue) is a sequence container that allows insertion and deletion at both ends. It is more efficient than a vector for frequent insertions and deletions at both ends.

Example:

#include <iostream>
#include <deque>

int main() {
    std::deque<int> d = {1, 2, 3, 4, 5};
    d.push_front(0);
    d.push_back(6);
    for(int i : d) {
        std::cout << i << " ";
    }
    return 0;
}
                
Output: 0 1 2 3 4 5 6

List

List is a doubly linked list that allows efficient insertion and deletion at any position. It does not provide random access to elements.

Example:

#include <iostream>
#include <list>

int main() {
    std::list<int> lst = {1, 2, 3, 4, 5};
    lst.push_front(0);
    lst.push_back(6);
    for(int i : lst) {
        std::cout << i << " ";
    }
    return 0;
}
                
Output: 0 1 2 3 4 5 6

Associative Containers

Associative containers store data in a sorted manner and allow fast retrieval using keys. Common associative containers are:

  • set - Collection of unique keys
  • map - Collection of key-value pairs
  • multiset - Collection of keys with duplicates allowed
  • multimap - Collection of key-value pairs with duplicates allowed

Set

Set is a collection of unique keys stored in a sorted order. It allows fast retrieval of keys.

Example:

#include <iostream>
#include <set>

int main() {
    std::set<int> s = {5, 1, 2, 4, 3};
    for(int i : s) {
        std::cout << i << " ";
    }
    return 0;
}
                
Output: 1 2 3 4 5

Map

Map is a collection of key-value pairs stored in a sorted order based on the keys. It allows fast retrieval of values using keys.

Example:

#include <iostream>
#include <map>

int main() {
    std::map<int, std::string> m;
    m[1] = "one";
    m[2] = "two";
    m[3] = "three";
    for(const auto &pair : m) {
        std::cout << pair.first << ": " << pair.second << "\n";
    }
    return 0;
}
                
Output: 1: one 2: two 3: three

Unordered Containers

Unordered containers store data in an unsorted manner and allow fast retrieval using hash tables. Common unordered containers are:

  • unordered_set - Collection of unique keys
  • unordered_map - Collection of key-value pairs
  • unordered_multiset - Collection of keys with duplicates allowed
  • unordered_multimap - Collection of key-value pairs with duplicates allowed

Unordered Set

Unordered set is a collection of unique keys stored in an unsorted manner. It allows fast retrieval of keys using hash tables.

Example:

#include <iostream>
#include <unordered_set>

int main() {
    std::unordered_set<int> us = {5, 1, 2, 4, 3};
    for(int i : us) {
        std::cout << i << " ";
    }
    return 0;
}
                
Output: (Order may vary) 3 1 2 5 4

Unordered Map

Unordered map is a collection of key-value pairs stored in an unsorted manner. It allows fast retrieval of values using keys and hash tables.

Example:

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, std::string> um;
    um[1] = "one";
    um[2] = "two";
    um[3] = "three";
    for(const auto &pair : um) {
        std::cout << pair.first << ": " << pair.second << "\n";
    }
    return 0;
}
                
Output: (Order may vary) 2: two 1: one 3: three