📖
C++
  • 1. C++ Basics
    • 1.1 Input, Output, and Program Structure
      • 1.1.1 Welcome to Data Structures in C++
      • 1.1.2 Hello World
      • 1.1.3 Input and Output
      • 1.1.4 getline and cin
      • 1.1.5 Program Structure
    • 1.2 Basic Data Types
      • 1.2.1 Basic Data Types
        • 1.2.1.1 Differences between C++ and Java Data Types and Variables
      • 1.2.2 Strings and Characters
      • 1.2.3 Numbers
      • 1.2.4 Booleans
    • 1.3 Conditional Statements
      • 1.3.1 Conditional Statements
      • 1.3.2 Basic If/Else Statements
      • 1.3.3 Comparing Strings
      • 1.3.4 Logical Operators
    • 1.4 Loops
      • 1.4.1 Loops
      • 1.4.2 For Loops
      • 1.4.3 While Loops
      • 1.4.4 Searching a String
    • 1.5 Functions in C++
      • 1.5.1 Functions in C++
      • 1.5.2 Defining and Calling Functions
      • 1.5.3 Passing by Reference vs Value
      • 1.5.4 Function Prototypes
  • 2. Going Beyond the Basics
    • 2.1 Vector Basics
      • 2.1.1 Vector Basics
      • 2.1.2 Creating and Accessing Vectors
      • 2.1.3 Inserting into a Vector
      • 2.1.4 Looping Through a Vector
    • 2.2 Function Default Values
      • 2.2.1 Function Default Values
      • 2.2.2 Default Values
      • 2.2.3 Default Values with a Prototype
      • 2.2.4 Example: Splitting a String
    • 2.3 Structs
      • 2.3.1 Structs
      • 2.3.2 Defining and Accessing Structs
      • 2.3.3 Using Structs: Line Length
    • 2.4 File Input/Output
      • 2.4.1 File Input/Output
      • 2.4.2 Reading in a File
      • 2.4.3 Processing a File
      • 2.4.4 Writing to a File
      • 2.4.5 Creating an Input Stream from a String
    • 2.5 Error Handling
      • 2.5.1 Error Handling
      • 2.5.2 Validating a Number
      • 2.5.3 Validating a Vector Index
      • 2.5.4 Throwing Other Values
  • 3. Libraries
    • 3.1 Header Files
      • 3.1.1 Header Files
      • 3.1.2 Header File
      • 3.1.3 Header and Implementation File
      • 3.1.4 Safer Header
    • 3.2 Using Libraries
      • 3.2.1 Using a Utilities Library
      • 3.2.2 The Util Library
  • 4. 2D Vectors, Stacks, and Queues
    • 4.1 2D Vectors
      • 4.1.1 2D Vectors
      • 4.1.2 The 2D Vector
      • 4.1.3 Creating a 2D Vector
    • 4.3 Stacks
      • 4.3.1 Stacks
      • 4.3.2 Basic Stack
      • 4.3.3 Stack Example: Reverse a String
    • 4.5 Queues
      • 4.5.1 Queues
      • 4.5.2 Basic Queues
      • 4.5.3 Queue Example: Next in Line
  • 5. Sets and Maps
    • 5.1 Pairs and Iterators
      • 5.1.1 Pairs and Iterators
      • 5.1.2 Pairs
      • 5.1.3 Iterators
    • 5.3 Sets
      • 5.3.1 Sets
      • 5.3.2 Basic Sets
      • 5.3.3 Iterating Through a Set
      • 5.3.4 Sets of Struct Values
    • 5.4 Maps
      • 5.4.1 Maps
      • 5.4.2 Map Basics
      • 5.4.3 Iterating Through a Map
      • 5.4.4 Updating Maps
  • 6. Recursion
    • 6.1 Functional Recursion
      • 6.1.1 Functional Recursion
      • 6.1.2 Basic Recursive Problem: Exponential
      • 6.1.3 Recursion Example: Reverse String
      • 6.1.4 Recursion Example: Make Sum
    • 6.2 Procedural Recursion
      • 6.2.1 Procedural Recursion
      • 6.2.2 Print Binary
      • 6.2.3 Print Permutations
      • 6.2.4 Depth vs Breadth Search
  • 7. Pointers, Linked Lists, and Graphs
    • 7.1 Pointers
      • 7.1.1 Pointers
      • 7.1.2 Assigning and Updating Pointers
      • 7.1.3 Pointers and Functions
      • 7.1.4 Pointers and Data Structures
    • 7.2 Linked Lists
      • 7.2.1 Linked Lists
      • 7.2.2 Basic Linked List
      • 7.2.3 Linked List and Recursion
      • 7.2.4 Example: Sorted Phone Book
      • 7.2.5 Doubly Linked List
    • 7.3 Graphs
      • 7.3.1 Graphs
      • 7.3.2 Basic Example: Breadth First Search
      • 7.3.3 Application: Connecting Cities
Powered by GitBook
On this page
  • Access vs Update vs Insert
  • Update With .at()
  • Shortcut Operators
  • Insert Function
  • Try This Example
  1. 5. Sets and Maps
  2. 5.4 Maps

5.4.4 Updating Maps

Like other data structures that use the [ ] operator, maps allow updates in the same way. With maps, it gets a little more tricky since the [ ] operator is also used to create new values.

Access vs Update vs Insert

When using the [ ] operator, you can do one of three things, access, update, or insert. If the key currently exists you will access it or update it with an assignment operator.

Take a look at this map:

map<string, int> people {{"James", 14}, {"Julie", 15}};

Map values:

James - 14
Julie - 15

You can access and update values with these statements:

// Access the value
cout << "James' age: << people["James"] << endl;

// Update the value
people["Julie"] =  14;

Map Values after this statement:

James - 14
Julie - 14

If the key doesn’t exist, the exact same sets of commands can be executed, but much different results.

// Access the value
cout << "Kyle's age: << people["Kyle"] << endl;

// Update the value
people["Karen"] =  14;

Map Values after this statement:

James - 14
Julie - 14
Kyle - 0
Karen - 14

Notice how the access in the print line created a new map entry with Kyle as the key and a default value of 0. Likewise, the access statement created a new entry with Karen as the key and a value of 14.

Update With .at()

Just like with the [ ] operator, the .at() can also be used to update values. As mentioned before, if you use the .at() and a value does not exist, it will throw an error.

Using the above example:

// Updates Karent to 15
people.at("Karen") =  15;

// Throws an error
people.at("Mikayla") = 14;

Shortcut Operators

Shortcut operators are also available for maps:

people["James"] ++; // add one to James
people["Julie] *= 2; // Double Julie
people["Karel"] ++; // Creates a new entry with a value of 1

Shortcuts work as expected, but notice in the last example how they can still be used to create new values and they perform the operation after the default value is created. You saw above that Kyle was created with a default value of 0, but since Karel is created with the incrementor, the value ends at 1.

Insert Function

You saw the basic insert command in an earlier example. Insert in maps actually works as it does for sets. There is a return pair with the first value being an iterator that points to the position of the element and the second value being a boolean as to whether the value was inserted.

map<string, int> people {{"James", 14}, {"Julie", 15}};

pair<map<string,int>::iterator, bool> rtn = 
        stock.insert(pair<string, int>("Kyle", 16));

cout << rtn.second << endl;

In the above example, the output will be 1 for true.

Previous5.4.3 Iterating Through a MapNext6. Recursion

Last updated 3 years ago

Try This Example