C++ Tutorial 18

Install C++In this tutorial I’ll cover the Associative Containers, Set, Multiset, Map, and Multimap. I’ll also cover the Container Adapters : Stacks, Queues, and Priority Queues. And, finally we’ll explore enums.

Like always all of the heavily commented code follows the video below. Use it while watching the videos for best results. Feel free to do what ever you’d like with it.

If you like videos like this, consider donating $1, or simply turn off Ad Blocking software. Either helps me to continue making free videos.

Code From the Video

// ----- ASSOCIATIVE CONTAINERS -----
// Associative containers store sorted data 
// which makes insertion slower, but searching
// faster

int main()
{
    // ----- SET -----
    // Sets store unique sorted values using a key
    std::set<int> set1 {5,4,3,2,1,1};
    std::cout << "Size : " << set1.size() <<
            "\n";
    
    // Insert value
    set1.insert(0);
    
    // Subscript operator doesn't work
    // std::cout << set1[0] << "\n";
    
    // Get values with an iterator
    std::set<int>::iterator it = set1.begin();
    it++;
    
    std::cout << "2nd : " << *it << "\n";
    
    // Erase value
    set1.erase(5);
    
    // Erase last 2
    it = set1.end();
    std::advance(it, -2);
    set1.erase(it, set1.end());
    
    // Add multiple values
    int arr[] = {6,7,8,9};
    set1.insert(arr,arr+4);
    
    // Find value, get iterator and then value
    auto val = set1.find(6);
    std::cout << "Found : " << *val << "\n";
    
    // Get iterator to value
    auto eight = set1.lower_bound(8);
    std::cout << "8 : " << *eight << "\n";
    
    // Get iterator to value after
    auto nine = set1.upper_bound(8);
    std::cout << "9 : " << *nine << "\n";
    
    // Swap values in sets
    std::set<int> set2 {10,11};
    set1.swap(set2);
    
    // Check if empty and if not print values
    if(!set1.empty()){
        for(int i : set1)
        std::cout << i << "\n";
    }
    
    // ----- END OF SET -----
    
    std::cout << "\n";
    
    // ----- MULTISET -----
    // Stores duplicate values in sorted order
    // Other than that it is the same as set
    std::multiset<int> mset1 {1,1,2,3,4};
    
    // Insert value
    mset1.insert(4);
    mset1.insert(0);
    
    if(!mset1.empty()){
        for(int i : mset1)
        std::cout << i << "\n";
    }
    
    // ----- END MULTISET -----
    
    std::cout << "\n";
    
    // ----- MAP -----
    // Stores using key value pairs and you
    // can't have duplicate keys
    std::map<int, std::string> map1;
    
    // Insert key values
    map1.insert(std::pair <int, std::string> (1, "Bart"));
    map1.insert(std::pair <int, std::string> (2, "Lisa"));
    map1.insert(std::pair <int, std::string> (3, "Marge"));
    map1.insert(std::pair <int, std::string> (4, "Homer"));
    
    // Find element by key
    auto match = map1.find(1);
    std::cout << match->second << "\n";
    
    // Get iterator to value
    auto bart = map1.lower_bound(1);
    std::cout << "LB : " << bart->second << "\n";
    
    // Get next iterator
    auto lisa = map1.upper_bound(1);
    std::cout << "UB : " << lisa->second << "\n";
    
    // Print elements with an iterator
    std::map<int, std::string>::iterator it2;
    for(it2 = map1.begin(); it2 != map1.end(); ++it2){
        std::cout << "Key : " << it2->first << "\n";
        std::cout << "Value : " << it2->second << "\n";
    }
    
    // ----- END OF MAP -----
    
    // ----- MULTIMAP -----
    // Like map except you can have duplicate keys as long
    // as the values are different
    std::multimap<int, std::string> mmap1;
    mmap1.insert(std::pair <int, std::string> (1, "Bart"));
    mmap1.insert(std::pair <int, std::string> (1, "Lisa"));
    mmap1.insert(std::pair <int, std::string> (3, "Marge"));
    std::map<int, std::string>::iterator it3;
    for(it3 = mmap1.begin(); it3 != mmap1.end(); ++it3){
        std::cout << "Key : " << it3->first << "\n";
        std::cout << "Value : " << it3->second << "\n";
    }
    
    // ----- END OF MULTIMAP -----
    
    // ----- CONTAINER ADAPTERS -----
    // Adapt containers to provide a defined interface
    
    // ----- STACK -----
    // Provides an interface for storing elements in a LIFO
    // format
    std::stack<std::string> custs;
    custs.push("George");
    custs.push("Louise");
    custs.push("Florence");
    
    // Get number of elements
    int size = custs.size();
    
    // Check if empty
    if(!custs.empty()){
        for(int i = 0; i < size; i++){
            
            // Get value with top
            std::cout << custs.top() << "\n";
            
            // Delete last value entered
            custs.pop();
        }
    }
        
    // ----- END OF STACK -----
    
    // ----- QUEUE -----
    // Provides an interface for storing elements in a FIFO
    // format
    std::queue<std::string> cast;
    cast.push("Zoidberg");
    cast.push("Bender");
    cast.push("Leela");
    int size2 = cast.size();
    
    if(!cast.empty()){
        for(int i = 0; i < size2; i++){
            
            // Get value with top
            std::cout << cast.front() << "\n";
            
            // Delete last value entered
            cast.pop();
        }
    }
    
    // ----- END OF QUEUE -----
    
    // ----- PRIORITY QUEUE -----
    // Elements are organized with the largest first
    std::priority_queue<int> nums;
    nums.push(4);
    nums.push(8);
    nums.push(5);
    int size3 = nums.size();
    
    if(!nums.empty()){
        for(int i = 0; i < size3; i++){
            
            // Get value with top
            std::cout << nums.top() << "\n";
            
            // Delete last value entered
            nums.pop();
        }
    }
    
    // ----- END OF PRIORITY QUEUE -----
    
    // ----- ENUMS -----
    // Custom data type that assigns names to 
    // constant integers so that a program is
    // easier to read
    
    // You can define the starting index, or any others
    enum day{Mon=1, Tues, Wed, Thur, Fri=5};
    
    enum day tuesday = Tues;
    
    std::cout << "Tuesday is the " << tuesday <<
            "nd day of the week\n";
    
    // Cycle through days
    for(int i = Mon; i <= Fri; i++)
        std::cout << i << "\n";
    
    // ----- END OF ENUMS -----
    
    return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *