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
Linda Hamiltonasal
2024-12-07 02:57:12854semak imbas

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>;

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!

Kenyataan:
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