Jadual cincang dan jadual cincang dalam C++

WBOY
Lepaskan: 2023-08-21 21:58:43
asal
1456 orang telah melayarinya

Jadual cincang dan jadual cincang dalam C++

Jadual cincang dan jadual cincang ialah struktur data yang sangat biasa dalam sains komputer. kenapa? Kerana jadual cincang dan jadual cincang boleh mencari elemen tertentu dengan cepat dalam masa yang tetap. Dalam banyak aplikasi, perbezaan prestasi ini adalah ketara.

Jadi, apakah perbezaan antara jadual hash dan jadual hash? Dalam C++, perbezaan antara kedua-duanya adalah sangat halus, dan mereka secara amnya boleh dianggap sebagai konsep yang sama. Dalam artikel ini, kami akan memperkenalkan jadual cincang dan jadual cincang secara terperinci.

Jadual cincang

Jadual cincang ialah struktur data berdasarkan fungsi cincang. Ia menyokong operasi pemasukan dan carian masa berterusan. Elemen data jadual cincang disusun mengikut hasil fungsi cincang. Untuk kunci yang berbeza, hasil yang dikembalikan oleh fungsi cincang adalah unik, iaitu setiap nilai kunci sepadan dengan nilai cincang.

Untuk menggunakan jadual cincang dalam C++, gunakan kelas unordered_map dalam perpustakaan standard. Selepas memasukkan fail pengepala , kita boleh mentakrifkan objek unordered_map dan kemudian mengendalikannya menggunakan fungsi ahlinya. Contohnya:

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

int main()
{
    std::unordered_map<std::string, int> grades;

    // 添加键值对
    grades["John"] = 90;
    grades["Sara"] = 85;
    grades["Bob"] = 95;

    // 查找键对应的值
    std::cout << "John's grade is " << grades["John"] << std::endl;

    return 0;
}
Salin selepas log masuk

Dalam contoh di atas, kami menggunakan unordered_map gred objek untuk melaksanakan fungsi pertanyaan gred pelajar. Melalui gred["John"], kita boleh mencari gred John dengan mudah dan hasil keluarannya ialah 90.

Jadual Hash

Jadual cincang ialah struktur data yang memetakan kunci ke lokasi berdasarkan fungsi cincang. Ia membolehkan operasi seperti sisipan dan carian dilakukan dalam masa yang tetap. Idea teras jadual cincang dan jadual cincang adalah sama, cuma perbezaannya ialah jadual cincang juga perlu mengendalikan konflik.

Konflik yang dipanggil bermakna dua nilai utama berbeza dicincang ke kedudukan yang sama oleh fungsi cincang. Pada masa ini, anda perlu menggunakan kaedah penyelesaian konflik fungsi cincang, seperti pencincangan terbuka atau pencincangan senarai terpaut. Dalam pencincangan terbuka, kaedah alamat terbuka adalah menggunakan slot lain, ia dipanggil slot terbuka, hitung nilai cincang kunci untuk memasukkan kunci dalam slot lain jadual cincang, jika slot sudah diduduki, cuba slot A lain . Dalam pencincangan senarai terpaut, senarai terpaut dilaksanakan dalam slot jadual cincang.

Untuk menggunakan jadual cincang dalam C++, anda perlu menggunakan kelas unordered_map atau unordered_set dalam perpustakaan standard. Apabila menggunakan kedua-dua kelas ini, kami juga perlu menyediakan fungsi cincangan lalai ialah templat kelas std::cincang, yang boleh memetakan sebarang pembolehubah jenis boleh cincang kepada nilai integer yang unik. Contohnya:

#include <unordered_set>
#include <string>
#include <iostream>

struct Person
{
    std::string name;
    int age;
};

bool operator==(const Person& lhs, const Person& rhs)
{
    return lhs.name == rhs.name && lhs.age == rhs.age;
}

// 哈希函数
struct PersonHash
{
    std::size_t operator()(const Person& p) const
    {
        std::size_t h1 = std::hash<std::string>()(p.name);
        std::size_t h2 = std::hash<int>()(p.age);
        return h1 ^ (h2 << 1);
    }
};

int main()
{
    std::unordered_set<Person, PersonHash> people = {
        {"John", 30},
        {"Sara", 25},
        {"Bob", 45},
    };

    // 添加元素
    people.insert({"Mary", 38});

    // 查找元素
    Person p = {"John", 30};
    if (people.find(p) != people.end()) {
        std::cout << p.name << " is found" << std::endl;
    }

    return 0;
}
Salin selepas log masuk

Dalam contoh di atas, kami menggunakan unordered_set untuk mengekalkan sekumpulan maklumat orang, dengan Person ialah jenis struktur yang mengandungi dua medan: nama dan umur. Perlu diingatkan bahawa kami juga menyediakan fungsi cincang tersuai PersonHash Memandangkan jenis Orang bukan jenis boleh cincang, kami perlu menyediakan fungsi cincang untuknya.

Ringkasan

Jadual cincang dan jadual cincang adalah struktur data yang sangat praktikal dalam C++ Dalam pembangunan sebenar, ia sering digunakan untuk mengekalkan set dan indeks kata kunci. Apabila menggunakannya, anda perlu memberi perhatian kepada pilihan fungsi hash dan cara menangani konflik.

Atas ialah kandungan terperinci Jadual cincang dan jadual cincang dalam C++. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!