Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengekalkan Susunan Sisipan dalam `std::map` Semasa Mengekalkan Carian Cekap?

Bagaimana untuk Mengekalkan Susunan Sisipan dalam `std::map` Semasa Mengekalkan Carian Cekap?

Linda Hamilton
Lepaskan: 2024-12-06 09:37:11
asal
275 orang telah melayarinya

How to Maintain Insertion Order in a `std::map` While Preserving Efficient Lookups?

Mengekalkan Susunan Sisipan dalam std::map

Dalam senario di mana std::map gagal mengekalkan susunan sisipan, timbul keperluan untuk bekas yang mengekalkan sifat kritikal ini. Semasa std::vector> kelihatan seperti alternatif yang berdaya maju, penalti prestasinya untuk carian kerap dan operasi kenaikan menimbulkan keraguan tentang kesesuaiannya.

Satu penyelesaian yang berkesan ialah menggunakan gabungan std::map dan std::vector. Memandangkan peta memastikan carian berasaskan rentetan yang cekap, anda boleh menyalin kandungan peta ke dalam std::vector sebelum melakukan operasi isihan. Functor tersuai boleh digunakan untuk mentakrifkan logik pengisihan berdasarkan susunan sisipan.

Sebagai alternatif, perpustakaan Boost menawarkan penyelesaian berkuasa dengan boost::multi_index. Ini membolehkan pengindeksan berbilang bagi satu bekas. Dalam kes anda, struktur berikut boleh dilaksanakan:

struct value_t {
  std::string s;
  int i;
};

struct string_tag {};

typedef multi_index_container<
    value_t,
    indexed_by<
        random_access<>, // index representing insertion order
        hashed_unique<tag<string_tag>, member<value_t, string, &value_t::s>>
    >
> values_t;
Salin selepas log masuk

Di sini, indeks random_access mengekalkan susunan sisipan manakala indeks hashed_unique memastikan pengecam rentetan unik untuk carian yang cekap. Pendekatan ini menyediakan kedua-dua carian yang cekap dan pemeliharaan susunan sisipan.

Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Susunan Sisipan dalam `std::map` Semasa Mengekalkan Carian Cekap?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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