Menu
Coddy logo textTech

Odczytywanie i modyfikowanie wartości

Część sekcji Logika i przepływ programu ścieżki C++ w Coddy. Lekcja 25 z 56.

Gdy masz już mapę z parami klucz–wartość, często trzeba będzie pobierać lub aktualizować zapisane w niej wartości. Operator nawiasów kwadratowych [] to wygodny sposób zarówno na dostęp do istniejących wartości, jak i ich modyfikowanie.

Aby uzyskać dostęp do wartości, po prostu użyj klucza w nawiasach kwadratowych:

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

Ta sama składnia działa przy aktualizowaniu istniejących wartości:

scores["Alice"] = 98; // Aktualizuje wynik Alice do 98

Oto ważne zachowanie, o którym warto pamiętać: jeśli użyjesz operatora [] z kluczem, który nie istnieje w mapie, automatycznie utworzy on nowy element z tym kluczem i zainicjuje go wartością domyślną (0 dla liczb całkowitych, pustym ciągiem znaków dla ciągów znaków itd.).

int bobScore = scores["Bob"]; // Tworzy "Bob" z wartością 0

Ta funkcja automatycznego tworzenia sprawia, że operator [] jest bardzo wygodny zarówno do odczytywania, jak i zapisywania danych mapy, ponieważ nie musisz sprawdzać, czy klucz istnieje, zanim go użyjesz.

Możesz również iterować przez wszystkie pary klucz-wartość w mapie za pomocą pętli for opartej na zakresie. Każdy element w mapie jest parą, w której pair.first przechowuje klucz, a pair.second przechowuje wartość:

for (auto pair : scores) {
    std::cout << pair.first << ": " << pair.second << std::endl;
}

Spowoduje to wypisanie każdej pary klucz-wartość przechowywanej w mapie, po jednej w każdym wierszu.

challenge icon

Wyzwanie

Łatwy

Utwórz program zarządzający systemem magazynowym produktów za pomocą std::map. Program będzie śledzić nazwy produktów i aktualne ilości ich zapasów, umożliwiając dostęp do poziomów zapasów i ich aktualizowanie.

Dane wejściowe będą podane w następującej postaci:

  • Liczba całkowita n oznaczająca liczbę początkowych produktów
  • Następnie n par danych wejściowych:
    • Ciąg znaków reprezentujący nazwę produktu
    • Liczba całkowita reprezentująca początkową ilość produktu w magazynie
  • Ciąg znaków reprezentujący nazwę produktu do zaktualizowania
  • Liczba całkowita reprezentująca nową ilość tego produktu w magazynie

Program powinien:

  1. Utworzyć obiekt std::map<std::string, int> o nazwie inventory
  2. Wczytać liczbę początkowych produktów
  3. Dla każdego produktu wczytać nazwę i ilość w magazynie, a następnie dodać je do mapy za pomocą notacji nawiasów kwadratowych
  4. Wypisać początkowy stan magazynu w formacie pokazanym poniżej
  5. Wczytać nazwę produktu i nową ilość do aktualizacji
  6. Użyć operatora nawiasów kwadratowych, aby zaktualizować ilość wskazanego produktu w magazynie
  7. Wypisać zaktualizowany stan magazynu, pokazując zmienioną ilość produktu

Użyj dokładnie następującego formatu wyjściowego:

Initial Inventory:
[product1]: [quantity1]
[product2]: [quantity2]
[product3]: [quantity3]
...
Updated Inventory:
[product1]: [quantity1]
[product2]: [updated_quantity2]
[product3]: [quantity3]
...

Produkty powinny być wypisywane w kolejności, w jakiej pojawiają się podczas iterowania po mapie (alfabetycznie według nazwy produktu). Użyj pętli for opartej na zakresie, aby dwukrotnie przejść przez mapę, uzyskując dostęp do każdej pary klucz-wartość za pomocą pair.first dla nazwy produktu i pair.second dla ilości. Jeśli nazwa produktu do zaktualizowania nie istnieje w mapie, operator nawiasów kwadratowych automatycznie utworzy nowy wpis o tej nazwie i określonej ilości.

Spróbuj swoich sił

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

int main() {
    // Wczytaj liczbę początkowych produktów
    int n;
    cin >> n;
    
    // Utwórz mapę stanu magazynowego
    map<string, int> inventory;
    
    // Wczytaj początkowe produkty i ich ilości
    for (int i = 0; i < n; i++) {
        string product;
        int quantity;
        cin >> product >> quantity;
        // TODO: Dodaj produkt do mapy stanu magazynowego
    }
    
    // TODO: Wyświetl początkowy stan magazynowy
    
    // Wczytaj produkt do aktualizacji oraz nową ilość
    string updateProduct;
    int newQuantity;
    cin >> updateProduct >> newQuantity;
    
    // TODO: Zaktualizuj ilość produktu w mapie
    
    // TODO: Wyświetl zaktualizowany stan magazynowy
    
    return 0;
}
quiz iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ programu

Poćwicz samodzielnie: Kompilator C++ online