Dalam C ++, apa tipe dari a std::map<>::iterator
?
Kita tahu bahwa suatu objek it
bertipe std::map<A,B>::iterator
memiliki kelebihan operator ->
yang mengembalikan a std::pair<A,B>*
, dan bahwa std::pair<>
memiliki a first
dan second
anggota.
Tetapi, untuk apa kedua anggota ini berkorespondensi, dan mengapa kita harus mengakses nilai yang disimpan dalam peta it->second
?
std::map
menyimpan kunci dan nilai .map::iterator.second
mengacu pada nilai .Jawaban:
Saya yakin Anda tahu bahwa
std::vector<X>
toko menyimpan sejumlahX
benda, bukan? Tetapi jika Anda memilikistd::map<X, Y>
, apa yang sebenarnya disimpan adalah sejumlah besarstd::pair<const X, Y>
. Begitulah peta itu - itu menyatukan kunci dan nilai terkait.Ketika Anda mengulangi lebih dari satu
std::map
, Anda mengulangi semua inistd::pair
. Ketika Anda melakukan dereferensi salah satu iterator ini, Anda mendapatkanstd::pair
kunci berisi dan nilai yang terkait.Di sini, jika sekarang Anda lakukan
*it
, Anda akan mendapatkanstd::pair
untuk elemen pertama di peta.Sekarang tipe
std::pair
memberi Anda akses ke elemen-elemennya melalui dua anggota:first
dansecond
. Jadi jika Anda telah seorangstd::pair<X, Y>
yang disebutp
,p.first
adalahX
objek danp.second
merupakanY
objek.Jadi sekarang Anda tahu bahwa dereferencing
std::map
iterator memberi Andastd::pair
, Anda kemudian dapat mengakses elemen-elemennya denganfirst
dansecond
. Misalnya,(*it).first
akan memberi Anda kunci dan(*it).second
akan memberi Anda nilai. Ini setara denganit->first
danit->second
.sumber
operator[]
harus mengembalikan tipe tertentu tetapifirst
dansecond
dapat memiliki tipe yang berbeda. Di sisi lain,std::tuple
memiliki fungsi pembantu khususstd::get
untuk mengakses elemen-elemennya dengan indeks.Jenis elemen dari suatu
std::map
(yang juga merupakan jenis ekspresi yang diperoleh dengan mereferensikan iterator peta itu) yang kuncinyaK
dan nilainyaV
adalahstd::pair<const K, V>
- kuncinya adalahconst
untuk mencegah Anda mengganggu pemilahan internal nilai peta.std::pair<>
memiliki dua anggota bernamafirst
dansecond
(lihat di sini ), dengan makna yang cukup intuitif. Dengan demikian, diberikan iteratori
ke peta tertentu, ungkapan:Yang setara dengan:
Mengacu pada elemen pertama (
const
) daripair
objek yang ditunjuk oleh iterator - yaitu mengacu pada kunci di peta. Sebaliknya, ungkapan:Yang setara dengan:
Mengacu pada kedua unsur
pair
- yaitu untuk yang sesuai nilai di peta.sumber