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!