Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Mengekalkan Susunan Sisipan dalam Peta Sambil Mengekalkan Carian Yang Cekap?

Bagaimanakah Saya Boleh Mengekalkan Susunan Sisipan dalam Peta Sambil Mengekalkan Carian Yang Cekap?

Susan Sarandon
Susan Sarandonasal
2024-12-03 16:17:11432semak imbas

How Can I Preserve Insertion Order in a Map While Maintaining Efficient Lookups?

Memelihara Susunan Sisipan dalam std::map

Dalam situasi di mana susunan sisipan adalah penting, bergantung semata-mata pada std::map mungkin tidak mencukupi. Jika mengekalkan susunan sisipan adalah keutamaan, terdapat pendekatan alternatif untuk dipertimbangkan.

Satu pilihan melibatkan menukar kandungan peta menjadi std::vector sebelum melelaran dan mencetak nilainya. Dengan memanfaatkan functor yang sesuai, anda boleh menggunakan std::sort untuk menyusun elemen berdasarkan tertib sisipannya.

Walau bagaimanapun, jika carian pantas adalah penting (mis., 10 juta kali), menggunakan vektor mungkin memperkenalkan prestasi kebimbangan. Untuk senario sedemikian, pustaka rangsangan::multi_index menawarkan penyelesaian yang menggabungkan kecekapan peta dengan fleksibiliti berbilang indeks.

Menggunakan boost::multi_index:

Pustaka ini membolehkan anda menubuhkan berbilang indeks untuk setiap bekas. Dalam kes khusus ini, anda boleh mentakrifkan struct value_t dengan ahli rentetan dan int, dan menggunakan dua indeks:

  1. Akses Rawak: Mewakili susunan sisipan
  2. Unik Dicincang: Mengindeks ahli rentetan untuk memudahkan dengan cepat carian

Anda kemudiannya boleh membuat instantiate multi_index_container seperti:

struct value_t {
    string s;
    int i;
};

struct string_tag {};

typedef multi_index_container<
    value_t,
    indexed_by<
        random_access<>, // insertion order
        hashed_unique<tag<string_tag>, member<value_t, string, &value_t::s>>
    >
> values_t;

Pendekatan ini memberikan carian yang cekap sambil mengekalkan susunan sisipan apabila melelaran bekas.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengekalkan Susunan Sisipan dalam Peta Sambil Mengekalkan Carian Yang Cekap?. 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