Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Tidak Boleh Menggunakan `std::pair` sebagai Kunci dalam `std::unordered_map` dan Bagaimana Saya Membetulkannya?

Mengapa Saya Tidak Boleh Menggunakan `std::pair` sebagai Kunci dalam `std::unordered_map` dan Bagaimana Saya Membetulkannya?

Linda Hamilton
Lepaskan: 2024-12-07 02:57:12
asal
867 orang telah melayarinya

Why Can't I Use `std::pair` as the Key in an `std::unordered_map` and How Do I Fix It?

Mengapa saya tidak boleh menyusun unordered_map dengan pasangan sebagai kunci?

Isu yang dihadapi di sini ialah ketiadaan fungsi cincang yang sesuai untuk jenis kunci. Untuk menyelesaikan masalah ini, sediakan fungsi cincang tersuai untuk kunci pasangan. Berikut ialah contoh:

#include <unordered_map>
#include <functional>
#include <string>
#include <utility>

struct pair_hash {
    template <class T1, class T2>
    std::size_t operator() (const std::pair<T1,T2>& p) const {
        auto h1 = std::hash<T1>{}(p.first);
        auto h2 = std::hash<T2>{}(p.second);

        return h1 ^ h2;  // Simple example, for better results use boost.hash_combine
    }
};

using Vote = std::pair<std::string, std::string>;
using Unordered_map = std::unordered_map<Vote, int, pair_hash>;
Salin selepas log masuk

Dengan fungsi cincang tersuai ini, anda kini boleh mencipta unordered_map tanpa ralat penyusunan. Ambil perhatian bahawa fungsi cincang yang disediakan di sini adalah ringkas untuk tujuan demonstrasi. Untuk senario dunia sebenar, pertimbangkan untuk menggunakan teknik seperti boost.hash_combine Boost untuk meningkatkan kualiti fungsi cincang anda.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan `std::pair` sebagai Kunci dalam `std::unordered_map` dan Bagaimana Saya Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan