Menu
Coddy logo textTech

בדיקה אם מפתחות קיימים

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C++ של Coddy. שיעור 26 מתוך 56.

אף שאופרטור הסוגריים המרובעים נוח לגישה לערכים במפה, יש בעיה אפשרית: מה קורה אם מנסים לגשת למפתח שאינו קיים? כפי שלמדת בשיעור הקודם, שימוש ב-[] עם מפתח שאינו קיים יוצר את המפתח הזה באופן אוטומטי עם ערך ברירת מחדל.

לפעמים רוצים לבדוק אם מפתח קיים לפני שניגשים אליו, בלי ליצור בטעות רשומות חדשות. כאן המתודה .count() שימושית. היא אומרת לך אם מפתח מסוים נמצא במפה.

המתודה .count() מחזירה 1 אם המפתח קיים ו-0 אם הוא לא קיים:

std::map<std::string, int> scores;
scores["Alice"] = 95;

if (scores.count("Alice")) {
    std::cout << "Alice's score: " << scores["Alice"] << std::endl;
} else {
    std::cout << "Alice not found" << std::endl;
}

הגישה הזו מאפשרת לך לבדוק בבטחה אם מפתח קיים ולטפל בשני המקרים כראוי, וכך למנוע יצירה של רשומות לא רצויות במפה שלך.

challenge icon

אתגר

קל

צרו תוכנית שמנהלת מערכת השאלת ספרים בספרייה באמצעות std::map. התוכנית תעקוב אחר הספרים הזמינים ותשתמש בשיטה .count() כדי לבדוק בבטחה אם ספרים קיימים לפני ניסיון לגשת למידע שלהם.

הקלטים הבאים יסופקו:

  • מספר שלם n המייצג את מספר הספרים בספרייה
  • לאחר מכן n זוגות של קלטים:
    • מחרוזת המייצגת את שם הספר
    • מספר שלם המייצג את מספר העותקים הזמינים
  • מספר שלם m המייצג את מספר בקשות הספרים לבדיקה
  • לאחר מכן m מחרוזות המייצגות את שמות הספרים לחיפוש

התוכנית שלכם צריכה:

  1. ליצור std::map<std::string, int> בשם library
  2. לקרוא את מספר הספרים ולאכלס את המפה בשמות הספרים ובמספר העותקים הזמינים שלהם
  3. לקרוא את מספר בקשות הספרים
  4. עבור כל בקשת ספר, להשתמש בשיטה .count() כדי לבדוק אם הספר קיים בספרייה
  5. להדפיס את ההודעה המתאימה בהתאם לשאלה אם הספר נמצא או לא

השתמשו בפורמט הפלט המדויק הבא:

עבור כל בקשת ספר:

  • אם הספר קיים: Book "[book title]" is available with [number] copies
  • אם הספר אינו קיים: Book "[book title]" is not available in the library

השתמשו בשיטה .count() בתוך פקודת if כדי לבדוק אם הספר קיים לפני גישה לערך שלו. אם library.count(bookTitle) מחזיר 1, הספר קיים ואפשר לגשת בבטחה אל library[bookTitle] כדי לקבל את מספר העותקים. אם הוא מחזיר 0, הספר אינו קיים בספרייה.

נסו בעצמכם

#include <iostream>
#include <map>
#include <string>
using namespace std;

int main() {
    // קראו את מספר הספרים
    int n;
    cin >> n;
    
    // צרו את מפת הספרייה
    map<string, int> library;
    
    // קראו את פרטי הספרים ומלאו את המפה
    for (int i = 0; i < n; i++) {
        string title;
        int copies;
        cin >> title >> copies;
        library[title] = copies;
    }
    
    // קראו את מספר הבקשות לספרים
    int m;
    cin >> m;
    
    // TODO: כתבו את הקוד שלכם למטה
    // טפלו בכל בקשה לספר באמצעות המתודה .count()
    // בדקו אם הספר קיים והדפיסו הודעה מתאימה
    
    return 0;
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C++ אונליין