Rumah >pembangunan bahagian belakang >C++ >Bagaimana Mengeluarkan Kunci atau Nilai dengan Cekap daripada std::map ke dalam Vektor?

Bagaimana Mengeluarkan Kunci atau Nilai dengan Cekap daripada std::map ke dalam Vektor?

Barbara Streisand
Barbara Streisandasal
2024-11-28 06:33:10746semak imbas

How to Efficiently Extract Keys or Values from a std::map into a Vector?

Dapatkan Elemen dari std::map ke dalam Vektor: Beyond Functors

Untuk mengekstrak kunci atau nilai daripada std::map, seseorang mungkin menggunakan fungsi secara naluri seperti yang ditunjukkan dalam kod yang disediakan coretan:

struct RetrieveKey
{
    template <typename T>
    typename T::first_type operator()(T keyValuePair) const
    {
        return keyValuePair.first;
    }
};

map<int, int> m;
vector<int> keys;
transform(m.begin(), m.end(), back_inserter(keys), RetrieveKey());

Walaupun pendekatan ini berfungsi secara teknikal, pendekatan ini mengalami kekaburan kod dan jarak pelaksanaan daripada sasaran.

Kaedah Alternatif: Gelung Iterator

Penyelesaian yang lebih mudah melibatkan gelung mudah di atas peta iterator:

for (map<int, int>::iterator it = m.begin(); it != m.end(); ++it) {
  keys.push_back(it->first);
}

Kaedah ini menawarkan kebolehbacaan yang jelas dan pengubahsuaian mudah untuk mendapatkan semula nilai dan bukannya kekunci.

Pendekatan Perpustakaan Tingkatkan

Jika menggunakan Tingkatkan perpustakaan, seseorang boleh menggunakan BOOST_FOREACH untuk lebih besar lagi kesederhanaan:

pair<int, int> me; // map element type
vector<int> v;
BOOST_FOREACH(me, m) {
  v.push_back(me.first);
}

Pendekatan ini memberikan eksplisit dan ringkas.

Ringkasnya, sementara kaedah functor kekal sebagai pilihan yang sah, gelung iterator dan pendekatan perpustakaan Boost menawarkan cara yang lebih mudah dan intuitif untuk dapatkan semula elemen daripada std::map menjadi vektor.

Atas ialah kandungan terperinci Bagaimana Mengeluarkan Kunci atau Nilai dengan Cekap daripada std::map ke dalam Vektor?. 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