📖 Scenario: You are building a simple contact list app. You want to store contacts with their phone numbers. You need to quickly find a contact's number by name. Also, you want to see contacts in alphabetical order sometimes.
🎯 Goal: Build a program that stores contacts in a dictionary-like structure, then extracts and prints contacts in alphabetical order using a binary search tree (BST) approach.
📋 What You'll Learn
Create a dictionary called contacts with exact entries: "Alice": "1234", "Bob": "5678", "Charlie": "91011"
Create an empty binary search tree structure called bst to store contact names
Insert all contact names from contacts into bst in alphabetical order
Print the contact names in alphabetical order from bst
💡 Why This Matters
🌍 Real World
Contact lists, phone books, and any app needing fast lookup plus ordered display use these data structures.
💼 Career
Understanding when to use hash maps or BSTs helps in software engineering roles involving data storage, search optimization, and UI display.
Progress0 / 4 steps
1
Create the contacts dictionary
Create a dictionary called contacts with these exact entries: "Alice": "1234", "Bob": "5678", "Charlie": "91011"
DSA C++
Hint
Use std::unordered_map<std::string, std::string> to create the dictionary with exact key-value pairs.
2
Create an empty BST structure
Create a struct called Node with std::string name, and pointers left and right. Then create a pointer called bst and set it to nullptr.
DSA C++
Hint
Define a struct with name and two child pointers. Initialize bst as a null pointer.
3
Insert contact names into BST
Write a function Node* insert(Node* root, std::string name) that inserts name into the BST rooted at root in alphabetical order. Then, use a for loop with auto& pair : contacts to insert each contact name into bst.
DSA C++
Hint
Use recursion to insert names alphabetically. Loop over contacts to insert each name.
4
Print contact names in alphabetical order
Write a function void inorderPrint(Node* root) that prints contact names in alphabetical order by traversing the BST in order. Then call inorderPrint(bst).
DSA C++
Hint
Use in-order traversal to print names alphabetically. Call inorderPrint(bst) inside main().
Practice
(1/5)
1. Which data structure is best suited when you need to maintain elements in sorted order and perform fast range queries?
easy
A. Hash Map
B. Binary Search Tree (BST)
C. Stack
D. Queue
Solution
Step 1: Understand the need for sorted order
Maintaining elements in sorted order requires a data structure that keeps elements arranged by key values.
Step 2: Identify data structure supporting range queries
BST supports in-order traversal which gives sorted order and allows efficient range queries. Hash Map does not maintain order.
Final Answer:
Binary Search Tree (BST) -> Option B
Quick Check:
Sorted order + range queries = BST [OK]
Hint: Sorted order needs BST, hash maps don't keep order [OK]
Common Mistakes:
Thinking hash maps keep elements sorted
Confusing stack or queue with ordered data structures
2. Which of the following is the correct way to declare a hash map in C++ that maps integers to strings?
easy
A. unordered_map myMap;
B. std::map myMap;
C. std::unordered_map myMap;
D. hash_map myMap;
Solution
Step 1: Identify correct C++ hash map syntax
The standard C++ hash map is declared using std::unordered_map with template parameters for key and value types.
Step 2: Check namespace and types
std::unordered_map is correct. std::map is ordered map, not hash map. "hash_map" is non-standard. "unordered_map" without std:: is incomplete.
Final Answer:
std::unordered_map myMap; -> Option C
Quick Check:
Correct hash map syntax = std::unordered_map [OK]
Hint: Use std::unordered_map for hash map [OK]
Common Mistakes:
Using std::map instead of unordered_map for hash map
Omitting std:: namespace
Using non-standard hash_map
3. Consider the following C++ code using a BST and a hash map:
std::map is a BST-based ordered map, iterates keys in ascending order: 1 2 3.
Step 2: Understand std::unordered_map iteration order
std::unordered_map does not guarantee order; insertion order is not preserved. Output could be 3 1 2 or any order, but here likely 3 1 2 as inserted.
Final Answer:
1 2 3
3 1 2 -> Option D
Quick Check:
Ordered map prints sorted keys, hash map prints unordered keys [OK]
Hint: std::map prints sorted keys; unordered_map order is unpredictable [OK]
Common Mistakes:
Assuming unordered_map prints keys sorted
Confusing std::map and std::unordered_map iteration order
4. The following code attempts to use a BST and a hash map to store and print keys. Identify the error:
std::map bst;
bst[5] = "five";
bst[3] = "three";
std::unordered_map hashMap;
hashMap[5] = "five";
hashMap[3] = "three";
for (auto it = bst.begin(); it != bst.end(); ++it)
std::cout << it->second << " ";
for (auto it = hashMap.begin(); it != hashMap.end(); ++it)
std::cout << it->first << " ";
medium
A. Missing #include <unordered_map>
B. No error; code runs correctly
C. Using it->second in hashMap loop instead of it->first
D. Cannot use iterators with std::unordered_map
Solution
Step 1: Check code for missing includes
std::unordered_map requires including <unordered_map> header. Without it, code will not compile.
Step 2: Verify iterator usage and member access
Iterators and it->first/second usage are correct for both containers.
Final Answer:
Missing #include <unordered_map> -> Option A
Quick Check:
unordered_map needs #include <unordered_map> [OK]
Hint: Always include <unordered_map> for std::unordered_map [OK]
Common Mistakes:
Assuming iterators can't be used with unordered_map
Confusing it->first and it->second usage
Ignoring missing header includes
5. You need to store a large dataset of user IDs (integers) with their scores (integers). You want to quickly find the top 10 users with the highest scores and also check if a user ID exists efficiently. Which data structure or combination is best suited?
hard
A. Use a BST keyed by score and a hash map for user ID lookup
B. Use only a hash map for all operations
C. Use a hash map for user ID to score and a max-heap for top scores
D. Use a BST keyed by user ID only
Solution
Step 1: Identify requirements
Need fast user ID existence check and fast retrieval of top 10 users by score.
Step 2: Analyze data structure trade-offs
Hash map gives O(1) user ID lookup but no order. BST keyed by score allows ordered traversal for top scores. Combining BST keyed by score and hash map keyed by user ID allows both operations efficiently.
Final Answer:
Use a BST keyed by score and a hash map for user ID lookup -> Option A
Quick Check:
Top scores + fast ID check = BST + hash map combo [OK]
Hint: Combine BST (score) + hash map (ID) for order and fast lookup [OK]
Common Mistakes:
Using only hash map loses order for top scores
Using only BST keyed by ID can't get top scores easily
Ignoring need for two data structures
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.