C++ Academy · Pelajaran

std::map

Storan pasangan kunci-nilai tersusun

Pelajaran 1 daripada 413 langkah

std::map ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.

Apakah std::map?

std::map menyimpan pasangan kunci-nilai yang diisih mengikut kunci. Setiap kunci adalah unik, dan carian, pemasukan serta pemadaman mengambil masa logaritma.

  • Kunci dikekalkan dalam susunan terisih.
  • Disokong oleh pepohon carian binari seimbang.
#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> ages;
    ages["Alice"] = 30;
    ages["Bob"] = 25;
    std::cout << "Alice is " << ages["Alice"] << '\n';
    return 0;
}

Memasukkan Unsur

Anda boleh memasukkan unsur menggunakan operator[], insert() atau emplace(). Menggunakan [] pada kunci yang tiada akan menciptakannya dengan nilai lalai.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m;
    m["one"] = 1;
    m.insert({"two", 2});
    m.emplace("three", 3);
    std::cout << m.size() << " entries\n";
    return 0;
}

Lelaran Terisih

Mengulang std::map akan melawati kunci dalam susunan menaik. Setiap unsur ialah std::pair dengan .first (kunci) dan .second (nilai).

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m{{"banana", 3}, {"apple", 5}, {"cherry", 1}};
    for (const auto& p : m) {
        std::cout << p.first << " = " << p.second << '\n';
    }
    return 0;
}

Mencari Kunci

Gunakan find() untuk mencari kunci dengan selamat. Ia mengembalikan iterator kepada unsur tersebut, atau end() jika tidak ditemui.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m{{"x", 10}, {"y", 20}};
    auto it = m.find("y");
    if (it != m.end()) {
        std::cout << "Found y = " << it->second << '\n';
    } else {
        std::cout << "Not found\n";
    }
    return 0;
}

Menyemak Kewujudan

Untuk menguji sama ada kunci wujud tanpa menciptakannya, gunakan count() (mengembalikan 0 atau 1) atau contains() dalam C++20.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m{{"a", 1}};
    std::cout << m.count("a") << '\n';
    std::cout << m.count("z") << '\n';
    return 0;
}

Mengemas Kini Nilai

Menetapkan semula kunci akan mengemas kini nilainya di tempat. Map hanya menyimpan satu nilai bagi setiap kunci.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> score;
    score["player"] = 10;
    score["player"] += 5;
    std::cout << score["player"] << '\n';
    return 0;
}

Memadamkan Unsur

erase() membuang unsur berdasarkan kunci atau iterator. Ia mengembalikan bilangan unsur yang dibuang apabila diberikan kunci.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
    m.erase("b");
    std::cout << m.size() << " left\n";
    for (const auto& p : m) std::cout << p.first << ' ';
    std::cout << '\n';
    return 0;
}

Menggunakan at()

at() mengembalikan rujukan kepada nilai bagi sesuatu kunci dan melontarkan std::out_of_range jika kunci itu tiada. Tidak seperti [], ia tidak pernah memasukkan unsur.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m{{"k", 42}};
    std::cout << m.at("k") << '\n';
    std::cout << "size: " << m.size() << '\n';
    return 0;
}

Mengira Kekerapan Perkataan

Kegunaan klasik std::map ialah mengira kemunculan. Operator [] memulakan kunci baharu dengan nilai 0 secara lalai, jadi ++ terus berfungsi.

#include <iostream>
#include <map>
#include <string>

int main() {
    std::string words[] = {"cat", "dog", "cat", "bird", "dog", "cat"};
    std::map<std::string, int> freq;
    for (const auto& w : words) freq[w]++;
    for (const auto& p : freq) std::cout << p.first << ": " << p.second << '\n';
    return 0;
}

Pengikatan Berstruktur

C++17 membolehkan anda membuka setiap pasangan menggunakan pengikatan berstruktur, lalu memberikan nama yang mudah dibaca kepada kunci dan nilai.

#include <iostream>
#include <map>

int main() {
    std::map<std::string, int> m{{"red", 1}, {"green", 2}};
    for (const auto& [name, value] : m) {
        std::cout << name << " -> " << value << '\n';
    }
    return 0;
}

Menyemak Sama Ada Kosong

empty() melaporkan sama ada map tidak mempunyai unsur, manakala clear() membuang semuanya sekali gus.

#include <iostream>
#include <map>

int main() {
    std::map<int, int> m{{1, 1}, {2, 4}};
    std::cout << std::boolalpha << m.empty() << '\n';
    m.clear();
    std::cout << m.empty() << '\n';
    return 0;
}

Semakan Pantas

Uji pemahaman anda tentang susunan std::map.

Ringkasan

Anda telah mempelajari bahawa std::map:

  • menyimpan kunci unik yang diisih dan dipetakan kepada nilai
  • menyokong insert, [], find, count, at dan erase
  • mengulang dalam susunan kunci menaik dengan pasangan yang boleh anda buka menggunakan pengikatan berstruktur

Seterusnya, anda akan melihat std::set untuk menyimpan nilai unik yang diisih sahaja.

Percuma untuk bermula

Pelajari C++ dengan tutor kecerdasan buatan — percuma

Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.

Kursus
51
Pelajaran
203

Soalan Lazim

Adakah pelajaran “std::map” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “std::map”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.

Apakah yang akan saya pelajari dalam “std::map”?

Storan pasangan kunci-nilai tersusun Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.

Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?

Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.

Berapa lamakah pelajaran “std::map” diambil?

Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.

Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?

Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.

Semua pelajaran dalam kursus ini

  1. std::map
  2. std::set
  3. multimap dan multiset
  4. Pembanding Tersuai
← Kembali ke C++ Academy