C++ Academy · Pelajaran

std::unordered_map

Carian berasaskan cincangan yang pantas

Pelajaran 1 daripada 413 langkah

std::unordered_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 Peta Tidak Tertib?

std::unordered_map menyimpan pasangan kunci-nilai dalam jadual hash. Carian, sisipan dan pemadaman mempunyai masa malar secara purata, tetapi unsur-unsurnya tidak mempunyai susunan tersusun.

#include <iostream>
#include <unordered_map>

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

Peta berbanding Peta Tidak Tertib

Pilih berdasarkan keperluan:

  • map: diisih, operasi O(log n).
  • unordered_map: tidak tertib, operasi O(1) secara purata.

Gunakan peta tidak tertib apabila anda hanya memerlukan carian pantas.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<int, std::string> m{{3, "c"}, {1, "a"}, {2, "b"}};
    std::cout << m.size() << " entries (order not guaranteed)\n";
    return 0;
}

Menyisip dan Mengemas Kini

Antara muka yang sama seperti map: gunakan [], insert() atau emplace().

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> m;
    m["x"] = 1;
    m.insert({"y", 2});
    m.emplace("z", 3);
    std::cout << m.size() << '\n';
    return 0;
}

Carian dengan find

find() mengembalikan lelar atau end(). Ini mengelakkan penyisipan nilai lalai secara tidak sengaja seperti yang akan dilakukan oleh [].

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> m{{"a", 1}};
    auto it = m.find("a");
    if (it != m.end()) std::cout << it->second << '\n';
    std::cout << "size: " << m.size() << '\n';
    return 0;
}

Menyemak Kewujudan

count() mengembalikan 0 atau 1, dan C++20 menambah contains() untuk semakan boolean yang jelas.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> m{{"key", 99}};
    std::cout << m.count("key") << '\n';
    std::cout << m.count("missing") << '\n';
    return 0;
}

Melakukan Lelaran

Anda boleh melakukan lelaran, tetapi susunannya tidak ditentukan. Jangan sekali-kali bergantung pada susunan yang diisih atau mengikut turutan sisipan.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> m{{"a", 1}, {"b", 2}, {"c", 3}};
    int total = 0;
    for (const auto& [k, v] : m) total += v;
    std::cout << "sum = " << total << '\n';
    return 0;
}

Memadam

erase() memadam berdasarkan kunci dan mengembalikan bilangan yang dipadam.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> m{{"a", 1}, {"b", 2}};
    m.erase("a");
    std::cout << m.count("a") << ' ' << m.size() << '\n';
    return 0;
}

Mengira Kekerapan dengan Pantas

Untuk set data besar yang tidak memerlukan susunan, unordered_map mengira kekerapan dengan lebih pantas berbanding map.

#include <iostream>
#include <unordered_map>
#include <string>

int main() {
    std::string items[] = {"a", "b", "a", "c", "b", "a"};
    std::unordered_map<std::string, int> freq;
    for (const auto& s : items) freq[s]++;
    std::cout << "a appears " << freq["a"] << " times\n";
    return 0;
}

Menggunakan at()

at() mengembalikan rujukan dan melontarkan std::out_of_range untuk kunci yang tiada, tanpa menyisipkan apa-apa.

#include <iostream>
#include <unordered_map>

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

Penyisipan Lalai melalui []

Mengakses kunci yang tiada dengan [] menyisipkannya bersama nilai yang dimulakan mengikut jenis (0 untuk int). Berhati-hati kerana tindakan ini membesarkan peta secara senyap.

#include <iostream>
#include <unordered_map>

int main() {
    std::unordered_map<std::string, int> m;
    std::cout << m["new"] << '\n';
    std::cout << "size: " << m.size() << '\n';
    return 0;
}

Mengosongkan Peta

clear() mengosongkan jadual, manakala empty() melaporkan sama ada tiada unsur di dalamnya.

#include <iostream>
#include <unordered_map>

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

Semakan Pantas

Uji pemahaman anda tentang susunan peta tidak tertib.

Imbas Kembali

Anda telah mempelajari bahawa std::unordered_map:

  • menggunakan jadual hash untuk operasi O(1) secara purata
  • tidak mempunyai susunan yang dijamin
  • berkongsi antara muka yang sama dengan map (find, count, at, erase)

Seterusnya, anda akan melihat unordered_set untuk penyimpanan unsur unik yang pantas.

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::unordered_map” percuma?

Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “std::unordered_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::unordered_map”?

Carian berasaskan cincangan yang pantas 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::unordered_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::unordered_map
  2. unordered_set
  3. Fungsi Cincangan Tersuai
  4. Pertimbangan Prestasi
← Kembali ke C++ Academy