map
Kelas
Digunakan untuk penyimpanan dan pengambilan data dari koleksi di mana setiap elemen adalah pasangan yang memiliki nilai data dan kunci pengurutan. Nilai kunci unik dan digunakan untuk mengurutkan data secara otomatis.
Nilai elemen dalam peta dapat diubah secara langsung. Nilai kunci adalah konstanta dan tidak dapat diubah. Sebagai gantinya, nilai kunci yang terkait dengan elemen lama harus dihapus, dan nilai kunci baru harus disisipkan untuk elemen baru.
Sintaks
template <class Key,
class Type,
class Traits = less<Key>,
class Allocator=allocator<pair <const Key, Type>>>
class map;
Parameter
Key
Jenis data kunci yang akan disimpan di map
.
Type
Jenis data elemen yang akan disimpan di map
.
Traits
Jenis yang menyediakan objek fungsi yang dapat membandingkan dua nilai elemen sebagai kunci pengurutan untuk menentukan urutan relatifnya di map
. Argumen ini bersifat opsional dan predikat less<Key>
biner adalah nilai default.
Di C++14, Anda dapat mengaktifkan pencarian heterogen dengan menentukan std::less<>
predikat yang tidak memiliki parameter jenis. Lihat Pencarian Heterogen di Kontainer Asosiatif untuk informasi selengkapnya.
Allocator
Jenis yang mewakili objek alokator tersimpan yang merangkum detail tentang alokasi peta dan alokasi memori. Argumen ini bersifat opsional dan nilai defaultnya adalah allocator<pair<const Key, Type> >
.
Keterangan
Kelas peta Pustaka Standar C++ adalah:
Kontainer ukuran variabel yang secara efisien mengambil nilai elemen berdasarkan nilai kunci terkait.
Dapat dibalik, karena menyediakan iterator dua arah untuk mengakses elemennya.
Diurutkan, karena elemennya diurutkan menurut nilai kunci sesuai dengan fungsi perbandingan yang ditentukan.
Unik. karena setiap elemennya harus memiliki kunci yang unik.
Kontainer asosiatif pasangan, karena nilai data elemennya berbeda dari nilai kuncinya.
Templat kelas, karena fungsionalitas yang disediakannya bersifat generik dan independen dari elemen atau jenis kunci. Jenis data yang digunakan untuk elemen dan kunci ditentukan sebagai parameter dalam templat kelas bersama dengan fungsi perbandingan dan alokator.
Iterator yang disediakan oleh kelas peta adalah iterator dua arah, tetapi insert
fungsi anggota kelas dan map
memiliki versi yang mengambil sebagai parameter templat iterator input yang lebih lemah, yang persyaratan fungsinya lebih sedikit dari yang dijamin oleh kelas iterator dua arah. Konsep iterator yang berbeda terkait dengan penyempurnaan dalam fungsionalitasnya. Setiap konsep iterator memiliki serangkaian persyaratannya sendiri, dan algoritma yang bekerja dengannya harus dibatasi oleh persyaratan tersebut. Iterator input dapat didereferensikan untuk merujuk ke beberapa objek dan dapat dinaikkan ke iterator berikutnya dalam urutan.
Sebaiknya Anda mendasarkan pilihan jenis kontainer pada jenis pencarian dan penyisipan yang diperlukan oleh aplikasi. Kontainer asosiatif dioptimalkan untuk operasi pencarian, penyisipan, dan penghapusan. Fungsi anggota yang secara eksplisit mendukung operasi ini melakukannya dalam waktu terburuk yang sebanding dengan logaritma jumlah elemen dalam kontainer. Menyisipkan elemen tidak membatalkan iterator, dan menghapus elemen hanya membatalkan iterator yang secara khusus menunjuk ke elemen yang dihapus.
Kami menyarankan agar Anda membuat peta kontainer pilihan asosiatif ketika kondisi yang mengaitkan nilai dengan kunci dipenuhi oleh aplikasi. Model untuk struktur semacam ini adalah daftar yang diurutkan dari kata kunci yang terjadi secara unik yang memiliki nilai string terkait yang memberikan definisi. Jika kata memiliki lebih dari satu definisi yang benar, sehingga kunci tidak unik, maka multimap akan menjadi kontainer pilihan. Jika hanya daftar kata yang disimpan, maka satu set akan menjadi kontainer yang sesuai. Jika beberapa kemunculan kata diizinkan, maka multiset akan sesuai.
Peta mengurutkan elemen yang dikontrolnya dengan memanggil objek fungsi tersimpan jenis key_compare
. Objek tersimpan ini adalah fungsi perbandingan key_comp
yang diakses dengan memanggil metode . Secara umum, dua elemen yang diberikan dibandingkan dengan menentukan apakah satu kurang dari yang lain atau apakah elemen tersebut setara. Karena semua elemen dibandingkan, urutan yang diurutkan dari elemen yang tidak setara dibuat.
Catatan
Fungsi perbandingan adalah predikat biner yang menginduksi urutan lemah yang ketat dalam arti matematika standar. Predikat biner f(x,y) adalah objek fungsi yang memiliki dua objek argumen x dan y, dan nilai true
pengembalian atau false
. Pemesanan yang diberlakukan pada satu set adalah urutan lemah yang ketat jika predikat biner tidak fleksibel, antisimmetris, dan transitif, dan jika kesetaraan transitif, di mana dua objek x dan y didefinisikan setara ketika f(x,y) dan f(y,x) adalah false
. Jika kondisi kesetaraan yang lebih kuat antara kunci menggantikan kesetaraan, urutan menjadi total (dalam arti bahwa semua elemen diurutkan sehubungan satu sama lain), dan kunci yang cocok akan tidak dapat dicermati dari satu sama lain.
Di C++14, Anda dapat mengaktifkan pencarian heterogen dengan menentukan std::less<>
atau std::greater<>
predikat yang tidak memiliki parameter jenis. Lihat Pencarian Heterogen di Kontainer Asosiatif untuk informasi selengkapnya.
Anggota
Konstruktor
Nama | Deskripsi |
---|---|
map |
Membuat daftar ukuran tertentu atau dengan elemen nilai tertentu atau dengan tertentu allocator atau sebagai salinan dari beberapa peta lainnya. |
Typedefs
Nama | Deskripsi |
---|---|
allocator_type |
Typedef untuk allocator kelas untuk objek peta. |
const_iterator |
Typedef untuk iterator dua arah yang dapat membaca const elemen di map . |
const_pointer |
Typedef untuk penunjuk ke const elemen dalam peta. |
const_reference |
Typedef untuk referensi ke elemen yang const disimpan dalam peta untuk membaca dan melakukan const operasi. |
const_reverse_iterator |
Jenis yang menyediakan iterator dua arah yang dapat membaca elemen apa pun const di map . |
difference_type |
Typedef bilangan bulat yang ditandatangani untuk jumlah elemen peta dalam rentang antara elemen yang diarahkan oleh iterator. |
iterator |
Typedef untuk iterator dua arah yang dapat membaca atau memodifikasi elemen apa pun dalam peta. |
key_compare |
Typedef untuk objek fungsi yang dapat membandingkan dua kunci pengurutan untuk menentukan urutan relatif dua elemen di map . |
key_type |
Typedef untuk kunci pengurutan yang disimpan di setiap elemen peta. |
mapped_type |
Typedef untuk data yang disimpan di setiap elemen peta. |
pointer |
Typedef untuk penunjuk ke const elemen dalam peta. |
reference |
Typedef untuk referensi ke elemen yang disimpan dalam peta. |
reverse_iterator |
Typedef untuk iterator dua arah yang dapat membaca atau memodifikasi elemen dalam peta terbalik. |
size_type |
Typedef bilangan bulat yang tidak ditandatangani untuk jumlah elemen dalam peta |
value_type |
Typedef untuk jenis objek yang disimpan sebagai elemen dalam peta. |
Fungsi anggota
Fungsi anggota | Deskripsi |
---|---|
at |
Menemukan elemen dengan nilai kunci yang ditentukan. |
begin |
Mengembalikan iterator yang menunjuk ke elemen pertama dalam map . |
cbegin |
Mengembalikan iterator const yang menunjuk ke elemen pertama dalam map . |
cend |
Mengembalikan iterator const past-the-end. |
clear |
Menghapus semua elemen dari map . |
contains C++20 |
Periksa apakah ada elemen dengan kunci yang ditentukan di map . |
count |
Mengembalikan jumlah elemen dalam peta yang kuncinya cocok dengan kunci yang ditentukan dalam parameter. |
crbegin |
Mengembalikan iterator const yang menunjuk ke elemen pertama dalam reversed map . |
crend |
Mengembalikan iterator const yang menunjuk ke lokasi setelah elemen terakhir dalam terbalik map . |
emplace |
Menyisipkan elemen yang dibangun di tempat ke map dalam . |
emplace_hint |
Menyisipkan elemen yang dibangun di tempat ke map dalam , dengan petunjuk penempatan. |
empty |
Mengembalikan true jika kosong map . |
end |
Mengembalikan iterator past-the-end. |
equal_range |
Mengembalikan sepasang iterator. Iterator pertama dalam pasangan menunjuk ke elemen pertama dalam map dengan kunci yang lebih besar dari kunci yang ditentukan. Iterator kedua dalam pasangan menunjuk ke elemen pertama di map dengan kunci yang sama dengan atau lebih besar dari kunci. |
erase |
Menghapus elemen atau rentang elemen dalam peta dari posisi yang ditentukan. |
find |
Mengembalikan iterator yang menunjuk ke lokasi elemen dalam map yang memiliki kunci yang sama dengan kunci yang ditentukan. |
get_allocator |
Mengembalikan salinan allocator objek yang digunakan untuk membuat map . |
insert |
Menyisipkan elemen atau rentang elemen ke dalam pada map posisi tertentu. |
key_comp |
Mengembalikan salinan objek perbandingan yang digunakan untuk mengurutkan kunci dalam map . |
lower_bound |
Mengembalikan iterator ke elemen pertama dalam map yang memiliki nilai kunci yang sama dengan atau lebih besar dari kunci yang ditentukan. |
max_size |
Mengembalikan panjang map maksimum . |
rbegin |
Mengembalikan iterator yang menunjuk ke elemen pertama dalam terbalik map . |
rend |
Mengembalikan iterator yang menunjuk ke lokasi setelah elemen terakhir dalam terbalik map . |
size |
Mengembalikan jumlah elemen dalam map . |
swap |
Menukar elemen dari dua peta. |
upper_bound |
Mengembalikan iterator ke elemen pertama dalam map yang memiliki nilai kunci yang lebih besar dari kunci yang ditentukan. |
value_comp |
Mengambil salinan objek perbandingan yang digunakan untuk mengurutkan nilai elemen dalam map . |
Operator
Nama | Deskripsi |
---|---|
operator[] |
Menyisipkan elemen ke dalam peta dengan nilai kunci tertentu. |
operator= |
Mengganti elemen peta dengan salinan peta lain. |
allocator_type
Jenis yang mewakili kelas alokator untuk objek peta.
typedef Allocator allocator_type;
Contoh
Lihat contoh untuk get_allocator
contoh yang menggunakan allocator_type
.
at
Menemukan elemen dengan nilai kunci tertentu.
Type& at(const Key& key);
const Type& at(const Key& key) const;
Parameter
key
Nilai kunci yang akan ditemukan.
Tampilkan Nilai
Referensi ke nilai data elemen yang ditemukan.
Keterangan
Jika nilai kunci argumen tidak ditemukan, maka fungsi akan melemparkan objek kelas out_of_range
Kelas.
Contoh
// map_at.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
typedef std::map<char, int> Mymap;
int main()
{
Mymap c1;
c1.insert(Mymap::value_type('a', 1));
c1.insert(Mymap::value_type('b', 2));
c1.insert(Mymap::value_type('c', 3));
// find and show elements
std::cout << "c1.at('a') == " << c1.at('a') << std::endl;
std::cout << "c1.at('b') == " << c1.at('b') << std::endl;
std::cout << "c1.at('c') == " << c1.at('c') << std::endl;
return (0);
}
begin
Mengembalikan iterator yang menangani elemen pertama di map
.
const_iterator begin() const;
iterator begin();
Tampilkan Nilai
Iterator dua arah yang menangani elemen pertama di map
atau lokasi yang menggantikan peta kosong.
Contoh
// map_begin.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int> m1;
map <int, int> :: iterator m1_Iter;
map <int, int> :: const_iterator m1_cIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 0, 0 ) );
m1.insert ( Int_Pair ( 1, 1 ) );
m1.insert ( Int_Pair ( 2, 4 ) );
m1_cIter = m1.begin ( );
cout << "The first element of m1 is " << m1_cIter -> first << endl;
m1_Iter = m1.begin ( );
m1.erase ( m1_Iter );
// The following 2 lines would err because the iterator is const
// m1_cIter = m1.begin ( );
// m1.erase ( m1_cIter );
m1_cIter = m1.begin( );
cout << "The first element of m1 is now " << m1_cIter -> first << endl;
}
The first element of m1 is 0
The first element of m1 is now 1
cbegin
Mengembalikan iterator const
yang membahas lokasi tepat di luar elemen terakhir dalam rentang.
const_iterator cbegin() const;
Tampilkan Nilai
Iterator const
dua arah yang membahas elemen pertama dalam rentang, atau lokasi tepat di luar akhir rentang kosong (untuk rentang kosong, cbegin() == cend()
).
Keterangan
Dengan nilai cbegin
pengembalian , elemen dalam rentang tidak dapat dimodifikasi.
Anda dapat menggunakan fungsi anggota ini sebagai pengganti begin()
fungsi anggota untuk menjamin bahwa nilai yang dikembalikan adalah const_iterator
. Biasanya, ini digunakan bersama dengan auto
kata kunci pengurangan jenis, seperti yang ditunjukkan dalam contoh berikut. Dalam contoh, pertimbangkan Container
untuk menjadi kontainer yang dapat dimodifikasi (non- const
) dari segala jenis yang mendukung begin()
dan cbegin()
.
auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();
// i2 is Container<T>::const_iterator
cend
Mengembalikan iterator const
yang membahas lokasi tepat di luar elemen terakhir dalam rentang.
const_iterator cend() const;
Tampilkan Nilai
Iterator const
akses dua arah yang menunjuk tepat di luar akhir rentang.
Keterangan
cend
digunakan untuk menguji apakah iterator telah melewati akhir rentangnya.
Anda dapat menggunakan fungsi anggota ini sebagai pengganti end()
fungsi anggota untuk menjamin bahwa nilai yang dikembalikan adalah const_iterator
. Biasanya, ini digunakan bersama dengan auto
kata kunci pengurangan jenis, seperti yang ditunjukkan dalam contoh berikut. Dalam contoh, pertimbangkan Container
untuk menjadi kontainer yang dapat dimodifikasi (non- const
) dari segala jenis yang mendukung end()
dan cend()
.
auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();
// i2 is Container<T>::const_iterator
Nilai yang dikembalikan oleh cend
tidak boleh didereferensikan.
clear
Menghapus semua elemen peta.
void clear();
Contoh
Contoh berikut menunjukkan penggunaan map::clear
fungsi anggota.
// map_clear.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main()
{
using namespace std;
map<int, int> m1;
map<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
m1.insert(Int_Pair(1, 1));
m1.insert(Int_Pair(2, 4));
i = m1.size();
cout << "The size of the map is initially "
<< i << "." << endl;
m1.clear();
i = m1.size();
cout << "The size of the map after clearing is "
<< i << "." << endl;
}
The size of the map is initially 2.
The size of the map after clearing is 0.
const_iterator
Jenis yang menyediakan iterator dua arah yang dapat membaca const
elemen di map
.
typedef implementation-defined const_iterator;
Keterangan
Jenis const_iterator
tidak dapat digunakan untuk mengubah nilai elemen.
yang const_iterator
ditentukan oleh peta menunjuk ke elemen yang merupakan objek dari , yaitu jenis value_type
pair<constKey, Type>
, yang anggota pertamanya adalah kunci elemen dan anggota keduanya adalah datum yang dipetakan yang dipegang oleh elemen .
Untuk mendereferensikan const_iterator
cIter
yang menunjuk ke elemen dalam peta, gunakan ->
operator.
Untuk mengakses nilai kunci untuk elemen, gunakan cIter
->first
, yang setara dengan (* cIter
). first
.
Untuk mengakses nilai datum yang dipetakan untuk elemen , gunakan cIter
->second
, yang setara dengan (* cIter
). second
.
Contoh
Lihat contoh untuk begin
contoh yang menggunakan const_iterator
.
const_pointer
Jenis yang menyediakan penunjuk ke const
elemen dalam peta.
typedef typename allocator_type::const_pointer const_pointer;
Keterangan
Jenis const_pointer
tidak dapat digunakan untuk mengubah nilai elemen.
Dalam kebanyakan kasus, harus iterator
digunakan untuk mengakses elemen dalam objek peta.
const_reference
Jenis yang menyediakan referensi ke elemen yang const
disimpan dalam peta untuk membaca dan melakukan const
operasi.
typedef typename allocator_type::const_reference const_reference;
Contoh
// map_const_ref.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int> m1;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
// Declare and initialize a const_reference &Ref1
// to the key of the first element
const int &Ref1 = ( m1.begin( ) -> first );
// The following line would cause an error as the
// non-const_reference can't be used to access the key
// int &Ref1 = ( m1.begin( ) -> first );
cout << "The key of first element in the map is "
<< Ref1 << "." << endl;
// Declare and initialize a reference &Ref2
// to the data value of the first element
int &Ref2 = ( m1.begin( ) -> second );
cout << "The data value of first element in the map is "
<< Ref2 << "." << endl;
}
The key of first element in the map is 1.
The data value of first element in the map is 10.
const_reverse_iterator
Jenis yang menyediakan iterator dua arah yang dapat membaca elemen apa pun const
di map
.
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
Keterangan
Jenis const_reverse_iterator
tidak dapat mengubah nilai elemen dan digunakan untuk melakukan iterasi melalui peta secara terbalik.
yang const_reverse_iterator
ditentukan oleh peta menunjuk ke elemen yang merupakan objek dari , yaitu jenis value_type
pair<const Key, Type>
, yang anggota pertamanya adalah kunci elemen dan anggota keduanya adalah datum yang dipetakan yang dipegang oleh elemen .
Untuk mendereferensikan const_reverse_iterator crIter
yang menunjuk ke elemen dalam peta, gunakan ->
operator.
Untuk mengakses nilai kunci untuk elemen, gunakan crIter
->first
, yang setara dengan (* crIter
).first
.
Untuk mengakses nilai datum yang dipetakan untuk elemen, gunakan crIter
->second
, yang setara dengan (* crIter
).first
.
Contoh
Lihat contoh untuk rend
contoh cara mendeklarasikan dan menggunakan const_reverse_iterator
.
count
Mengembalikan jumlah elemen dalam peta yang kuncinya cocok dengan kunci yang ditentukan parameter.
size_type count(const Key& key) const;
Parameter
key
Nilai kunci elemen yang akan dicocokkan dari peta.
Tampilkan Nilai
1 jika peta berisi elemen yang kunci pengurutannya cocok dengan kunci parameter; 0 jika peta tidak berisi elemen dengan kunci yang cocok.
Keterangan
Fungsi anggota mengembalikan jumlah elemen x dalam rentang
[ lower_bound(key), upper_bound(key) )
yaitu 0 atau 1 dalam kasus peta, yang merupakan kontainer asosiatif unik.
Contoh
Contoh berikut menunjukkan penggunaan map::count
fungsi anggota.
// map_count.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main()
{
using namespace std;
map<int, int> m1;
map<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
m1.insert(Int_Pair(1, 1));
m1.insert(Int_Pair(2, 1));
m1.insert(Int_Pair(1, 4));
m1.insert(Int_Pair(2, 1));
// Keys must be unique in map, so duplicates are ignored
i = m1.count(1);
cout << "The number of elements in m1 with a sort key of 1 is: "
<< i << "." << endl;
i = m1.count(2);
cout << "The number of elements in m1 with a sort key of 2 is: "
<< i << "." << endl;
i = m1.count(3);
cout << "The number of elements in m1 with a sort key of 3 is: "
<< i << "." << endl;
}
The number of elements in m1 with a sort key of 1 is: 1.
The number of elements in m1 with a sort key of 2 is: 1.
The number of elements in m1 with a sort key of 3 is: 0.
contains
Memeriksa apakah ada elemen dengan kunci yang ditentukan di map
.
bool contains(const Key& key) const;
template<class K> bool contains(const K& key) const;
Parameter
K
Jenis kunci.
key
Nilai kunci elemen yang akan dicari.
Tampilkan Nilai
true
jika elemen ditemukan dalam kontainer; false
Sebaliknya.
Keterangan
contains()
baru di C++20. Untuk menggunakannya, tentukan opsi pengkompilasi atau yang /std:c++20
lebih baru.
template<class K> bool contains(const K& key) const
hanya berpartisipasi dalam resolusi kelebihan beban jika key_compare
transparan. Lihat Pencarian heterogen dalam kontainer asosiatif untuk informasi selengkapnya.
Contoh
// Requires /std:c++20 or /std:c++latest
#include <map>
#include <string>
#include <iostream>
#include <functional>
int main()
{
std::map<int, bool> m = {{0, true},{1, false}};
std::cout << std::boolalpha; // so booleans show as 'true' or 'false'
std::cout << m.contains(1) << '\n';
std::cout << m.contains(2) << '\n';
// call template function
std::map<std::string, int, std::less<>> m2 = {{"ten", 10}, {"twenty", 20}, {"thirty", 30}};
std::cout << m2.contains("ten");
return 0;
}
true
false
true
crbegin
Mengembalikan iterator const yang menangani elemen pertama dalam peta terbalik.
const_reverse_iterator crbegin() const;
Tampilkan Nilai
Iterator dua arah terbalik const yang membahas elemen pertama dalam terbalik map
atau mengatasi apa yang telah menjadi elemen terakhir dalam yang tidak terbalik map
.
Keterangan
crbegin
digunakan dengan terbalik map
seperti begin
yang digunakan dengan map
.
Dengan nilai crbegin
pengembalian , map
objek tidak dapat dimodifikasi
crbegin
dapat digunakan untuk melakukan iterasi melalui mundur map
.
Contoh
// map_crbegin.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int> m1;
map <int, int> :: const_reverse_iterator m1_crIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m1_crIter = m1.crbegin( );
cout << "The first element of the reversed map m1 is "
<< m1_crIter -> first << "." << endl;
}
The first element of the reversed map m1 is 3.
crend
Mengembalikan iterator const yang membahas lokasi yang menggantikan elemen terakhir dalam peta terbalik.
const_reverse_iterator crend() const;
Tampilkan Nilai
Iterator dua arah terbalik const yang membahas lokasi yang menggantikan elemen terakhir dalam terbalik map
(lokasi yang telah mendahului elemen pertama dalam yang tidak terbalik map
).
Keterangan
crend
digunakan dengan peta terbalik seperti end
yang digunakan dengan map
.
Dengan nilai crend
pengembalian , map
objek tidak dapat dimodifikasi.
crend
dapat digunakan untuk menguji apakah iterator terbalik telah mencapai akhir map
.
Nilai yang dikembalikan oleh crend
tidak boleh didereferensikan.
Contoh
// map_crend.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int> m1;
map <int, int> :: const_reverse_iterator m1_crIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m1_crIter = m1.crend( );
m1_crIter--;
cout << "The last element of the reversed map m1 is "
<< m1_crIter -> first << "." << endl;
}
The last element of the reversed map m1 is 1.
difference_type
Jenis bilangan bulat bertanda tangan yang dapat digunakan untuk mewakili jumlah elemen peta dalam rentang antara elemen yang diarahkan oleh iterator.
typedef allocator_type::difference_type difference_type;
Keterangan
difference_type
adalah jenis yang dikembalikan saat mengurangi atau menambah melalui iterator kontainer. difference_type
biasanya digunakan untuk mewakili jumlah elemen dalam rentang [ pertama, terakhir) antara iterator first
dan last
, termasuk elemen yang diarahkan oleh first
dan rentang elemen hingga, tetapi tidak termasuk, elemen yang ditunjukkan oleh last
.
Meskipun difference_type
tersedia untuk semua iterator yang memenuhi persyaratan iterator input, yang mencakup kelas iterator dua arah yang didukung oleh kontainer yang dapat dibalik seperti set, pengurangan antara iterator hanya didukung oleh iterator akses acak yang disediakan oleh kontainer akses acak seperti vektor.
Contoh
// map_diff_type.cpp
// compile with: /EHsc
#include <iostream>
#include <map>
#include <algorithm>
int main( )
{
using namespace std;
map <int, int> m1;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 3, 20 ) );
m1.insert ( Int_Pair ( 2, 30 ) );
map <int, int>::iterator m1_Iter, m1_bIter, m1_eIter;
m1_bIter = m1.begin( );
m1_eIter = m1.end( );
// Count the number of elements in a map
map <int, int>::difference_type df_count = 1;
m1_Iter = m1.begin( );
while ( m1_Iter != m1_eIter)
{
df_count++;
m1_Iter++;
}
cout << "The number of elements in the map m1 is: "
<< df_count << "." << endl;
}
The number of elements in the map m1 is: 4.
emplace
Menyisipkan elemen yang dibangun di tempat (tidak ada operasi salin atau pemindahan yang dilakukan) ke dalam peta.
template <class... Args>
pair<iterator, bool>
emplace(
Args&&... args);
Parameter
args
Argumen yang diteruskan untuk membuat elemen untuk dimasukkan ke dalam peta kecuali sudah berisi elemen yang nilainya diurutkan secara setara.
Tampilkan Nilai
Komponennya bool
pair
adalah true
jika penyisipan dibuat, dan false
jika peta sudah berisi elemen nilai yang setara dalam pengurutan. Komponen iterator dari pasangan nilai kembali menunjuk ke elemen yang baru disisipkan jika bool
komponen tersebut benar, atau ke elemen yang ada jika bool
komponen salah.
Untuk mengakses komponen iterator dari pair
pr
, gunakan pr.first
; untuk mendereferensikannya, gunakan *pr.first
. Untuk mengakses bool
komponen, gunakan pr.second
. Misalnya, lihat kode sampel nanti di artikel ini.
Keterangan
Tidak ada iterator atau referensi yang tidak valid oleh fungsi ini.
Selama penempatan, jika pengecualian dilemparkan, status kontainer tidak dimodifikasi.
Elemen value_type
adalah pasangan, sehingga nilai elemen akan menjadi pasangan yang diurutkan dengan komponen pertama yang sama dengan nilai kunci dan komponen kedua yang sama dengan nilai data elemen.
Contoh
// map_emplace.cpp
// compile with: /EHsc
#include <map>
#include <string>
#include <iostream>
using namespace std;
template <typename M> void print(const M& m) {
cout << m.size() << " elements: ";
for (const auto& p : m) {
cout << "(" << p.first << ", " << p.second << ") ";
}
cout << endl;
}
int main()
{
map<int, string> m1;
auto ret = m1.emplace(10, "ten");
if (!ret.second){
auto pr = *ret.first;
cout << "Emplace failed, element with key 10 already exists."
<< endl << " The existing element is (" << pr.first << ", " << pr.second << ")"
<< endl;
cout << "map not modified" << endl;
}
else{
cout << "map modified, now contains ";
print(m1);
}
cout << endl;
ret = m1.emplace(10, "one zero");
if (!ret.second){
auto pr = *ret.first;
cout << "Emplace failed, element with key 10 already exists."
<< endl << " The existing element is (" << pr.first << ", " << pr.second << ")"
<< endl;
}
else{
cout << "map modified, now contains ";
print(m1);
}
cout << endl;
}
emplace_hint
Menyisipkan elemen yang dibangun di tempat (tidak ada operasi salin atau pemindahan yang dilakukan), dengan petunjuk penempatan.
template <class... Args>
iterator emplace_hint(
const_iterator where,
Args&&... args);
Parameter
args
Argumen yang diteruskan untuk membuat elemen untuk dimasukkan ke dalam peta kecuali peta sudah berisi elemen tersebut atau, lebih umum, kecuali sudah berisi elemen yang kuncinya diurutkan secara setara.
where
Tempat untuk mulai mencari titik penyisipan yang benar. (Jika titik itu segera mendahului di mana, penyisipan dapat terjadi dalam waktu konstanta yang diamortisasi alih-alih waktu logaritmik.)
Tampilkan Nilai
Iterator ke elemen yang baru disisipkan.
Jika penyisipan gagal karena elemen sudah ada, mengembalikan iterator ke elemen yang ada dengan kuncinya.
Keterangan
Tidak ada iterator atau referensi yang tidak valid oleh fungsi ini.
Selama penempatan, jika pengecualian dilemparkan, status kontainer tidak dimodifikasi.
Elemen value_type
adalah pasangan, sehingga nilai elemen akan menjadi pasangan yang diurutkan dengan komponen pertama yang sama dengan nilai kunci dan komponen kedua yang sama dengan nilai data elemen.
Contoh
// map_emplace.cpp
// compile with: /EHsc
#include <map>
#include <string>
#include <iostream>
using namespace std;
template <typename M> void print(const M& m) {
cout << m.size() << " elements: " << endl;
for (const auto& p : m) {
cout << "(" << p.first << "," << p.second << ") ";
}
cout << endl;
}
int main()
{
map<string, string> m1;
// Emplace some test data
m1.emplace("Anna", "Accounting");
m1.emplace("Bob", "Accounting");
m1.emplace("Carmine", "Engineering");
cout << "map starting data: ";
print(m1);
cout << endl;
// Emplace with hint
// m1.end() should be the "next" element after this emplacement
m1.emplace_hint(m1.end(), "Doug", "Engineering");
cout << "map modified, now contains ";
print(m1);
cout << endl;
}
empty
Menguji apakah peta kosong.
bool empty() const;
Tampilkan Nilai
true
jika peta kosong; false
jika peta tidak ada.
Contoh
// map_empty.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int> m1, m2;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 1 ) );
if ( m1.empty( ) )
cout << "The map m1 is empty." << endl;
else
cout << "The map m1 is not empty." << endl;
if ( m2.empty( ) )
cout << "The map m2 is empty." << endl;
else
cout << "The map m2 is not empty." << endl;
}
The map m1 is not empty.
The map m2 is empty.
end
Mengembalikan iterator past-the-end.
const_iterator end() const;
iterator end();
Tampilkan Nilai
Iterator past-the-end. Jika peta kosong, maka map::end() == map::begin()
.
Keterangan
end
digunakan untuk menguji apakah iterator telah melewati akhir petanya.
Nilai yang dikembalikan oleh end
tidak boleh didereferensikan.
Untuk contoh kode, lihat map::find
.
equal_range
Mengembalikan sepasang iterator yang mewakili lower_bound
kunci dan upper_bound
kunci.
pair <const_iterator, const_iterator> equal_range (const Key& key) const;
pair <iterator, iterator> equal_range (const Key& key);
Parameter
key
Nilai kunci argumen yang akan dibandingkan dengan kunci pengurutan elemen dari peta yang sedang dicari.
Tampilkan Nilai
Untuk mengakses iterator pertama pasangan pr
yang dikembalikan oleh fungsi anggota, gunakan pr
. pertama, dan untuk mendereferensikan iterator batas bawah, gunakan *( pr
. pertama). Untuk mengakses iterator kedua pasangan pr
yang dikembalikan oleh fungsi anggota, gunakan pr
. kedua, dan untuk mendereferensikan iterator batas atas, gunakan *( pr
. kedua).
Contoh
// map_equal_range.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
typedef map <int, int, less<int> > IntMap;
IntMap m1;
map <int, int> :: const_iterator m1_RcIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
pair <IntMap::const_iterator, IntMap::const_iterator> p1, p2;
p1 = m1.equal_range( 2 );
cout << "The lower bound of the element with "
<< "a key of 2 in the map m1 is: "
<< p1.first -> second << "." << endl;
cout << "The upper bound of the element with "
<< "a key of 2 in the map m1 is: "
<< p1.second -> second << "." << endl;
// Compare the upper_bound called directly
m1_RcIter = m1.upper_bound( 2 );
cout << "A direct call of upper_bound( 2 ) gives "
<< m1_RcIter -> second << "," << endl
<< "matching the 2nd element of the pair"
<< " returned by equal_range( 2 )." << endl;
p2 = m1.equal_range( 4 );
// If no match is found for the key,
// both elements of the pair return end( )
if ( ( p2.first == m1.end( ) ) && ( p2.second == m1.end( ) ) )
cout << "The map m1 doesn't have an element "
<< "with a key less than 40." << endl;
else
cout << "The element of map m1 with a key >= 40 is: "
<< p2.first -> first << "." << endl;
}
The lower bound of the element with a key of 2 in the map m1 is: 20.
The upper bound of the element with a key of 2 in the map m1 is: 30.
A direct call of upper_bound( 2 ) gives 30,
matching the 2nd element of the pair returned by equal_range( 2 ).
The map m1 doesn't have an element with a key less than 40.
erase
Menghapus elemen atau rentang elemen dalam peta dari posisi tertentu atau menghapus elemen yang cocok dengan kunci tertentu.
iterator erase(
const_iterator Where);
iterator erase(
const_iterator First,
const_iterator Last);
size_type erase(
const key_type& Key);
Parameter
Where
Posisi elemen yang akan dihapus.
First
Posisi elemen pertama yang akan dihapus.
Last
Posisi tepat di luar elemen terakhir yang akan dihapus.
Key
Nilai kunci elemen yang akan dihapus.
Tampilkan Nilai
Untuk dua fungsi anggota pertama, iterator dua arah yang menunjuk elemen pertama yang tersisa di luar elemen apa pun yang dihapus, atau elemen yang merupakan akhir peta jika tidak ada elemen tersebut.
Untuk fungsi anggota ketiga, mengembalikan jumlah elemen yang telah dihapus dari peta.
Contoh
// map_erase.cpp
// compile with: /EHsc
#include <map>
#include <string>
#include <iostream>
#include <iterator> // next() and prev() helper functions
#include <utility> // make_pair()
using namespace std;
using mymap = map<int, string>;
void printmap(const mymap& m) {
for (const auto& elem : m) {
cout << " [" << elem.first << ", " << elem.second << "]";
}
cout << endl << "size() == " << m.size() << endl << endl;
}
int main()
{
mymap m1;
// Fill in some data to test with, one at a time
m1.insert(make_pair(1, "A"));
m1.insert(make_pair(2, "B"));
m1.insert(make_pair(3, "C"));
m1.insert(make_pair(4, "D"));
m1.insert(make_pair(5, "E"));
cout << "Starting data of map m1 is:" << endl;
printmap(m1);
// The 1st member function removes an element at a given position
m1.erase(next(m1.begin()));
cout << "After the 2nd element is deleted, the map m1 is:" << endl;
printmap(m1);
// Fill in some data to test with, one at a time, using an initializer list
mymap m2
{
{ 10, "Bob" },
{ 11, "Rob" },
{ 12, "Robert" },
{ 13, "Bert" },
{ 14, "Bobby" }
};
cout << "Starting data of map m2 is:" << endl;
printmap(m2);
// The 2nd member function removes elements
// in the range [First, Last)
m2.erase(next(m2.begin()), prev(m2.end()));
cout << "After the middle elements are deleted, the map m2 is:" << endl;
printmap(m2);
mymap m3;
// Fill in some data to test with, one at a time, using emplace
m3.emplace(1, "red");
m3.emplace(2, "yellow");
m3.emplace(3, "blue");
m3.emplace(4, "green");
m3.emplace(5, "orange");
m3.emplace(6, "purple");
m3.emplace(7, "pink");
cout << "Starting data of map m3 is:" << endl;
printmap(m3);
// The 3rd member function removes elements with a given Key
mymap::size_type count = m3.erase(2);
// The 3rd member function also returns the number of elements removed
cout << "The number of elements removed from m3 is: " << count << "." << endl;
cout << "After the element with a key of 2 is deleted, the map m3 is:" << endl;
printmap(m3);
}
find
Mengembalikan iterator yang merujuk ke lokasi elemen dalam peta yang memiliki kunci yang setara dengan kunci yang ditentukan.
iterator find(const Key& key);
const_iterator find(const Key& key) const;
Parameter
key
Nilai kunci yang akan dicocokkan dengan kunci pengurutan elemen dari peta yang sedang dicari.
Tampilkan Nilai
Iterator yang mengacu pada lokasi elemen dengan kunci yang ditentukan, atau lokasi berhasil elemen terakhir di map
(map::end()
) jika tidak ada kecocokan yang ditemukan untuk kunci.
Keterangan
Fungsi anggota mengembalikan iterator yang mengacu pada elemen dalam map
kunci pengurutan yang setara dengan kunci argumen di bawah predikat biner yang menginduksi pengurutan berdasarkan hubungan yang kurang dari perbandingan.
Jika nilai find
pengembalian ditetapkan ke const_iterator
, objek peta tidak dapat dimodifikasi. Jika nilai find
pengembalian ditetapkan ke iterator
, objek peta dapat dimodifikasi
Contoh
// compile with: /EHsc /W4 /MTd
#include <map>
#include <iostream>
#include <vector>
#include <string>
#include <utility> // make_pair()
using namespace std;
template <typename A, typename B> void print_elem(const pair<A, B>& p) {
cout << "(" << p.first << ", " << p.second << ") ";
}
template <typename T> void print_collection(const T& t) {
cout << t.size() << " elements: ";
for (const auto& p : t) {
print_elem(p);
}
cout << endl;
}
template <typename C, class T> void findit(const C& c, T val) {
cout << "Trying find() on value " << val << endl;
auto result = c.find(val);
if (result != c.end()) {
cout << "Element found: "; print_elem(*result); cout << endl;
} else {
cout << "Element not found." << endl;
}
}
int main()
{
map<int, string> m1({ { 40, "Zr" }, { 45, "Rh" } });
cout << "The starting map m1 is (key, value):" << endl;
print_collection(m1);
vector<pair<int, string>> v;
v.push_back(make_pair(43, "Tc"));
v.push_back(make_pair(41, "Nb"));
v.push_back(make_pair(46, "Pd"));
v.push_back(make_pair(42, "Mo"));
v.push_back(make_pair(44, "Ru"));
v.push_back(make_pair(44, "Ru")); // attempt a duplicate
cout << "Inserting the following vector data into m1:" << endl;
print_collection(v);
m1.insert(v.begin(), v.end());
cout << "The modified map m1 is (key, value):" << endl;
print_collection(m1);
cout << endl;
findit(m1, 45);
findit(m1, 6);
}
get_allocator
Mengembalikan salinan objek alokator yang digunakan untuk membuat peta.
allocator_type get_allocator() const;
Tampilkan Nilai
Alokator yang digunakan oleh peta.
Keterangan
Alokator untuk kelas peta menentukan bagaimana kelas mengelola penyimpanan. Alokator default yang disediakan dengan kelas kontainer Pustaka Standar C++ cukup untuk sebagian besar kebutuhan pemrograman. Menulis dan menggunakan kelas alokator Anda sendiri adalah topik C++ tingkat lanjut.
Contoh
// map_get_allocator.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int>::allocator_type m1_Alloc;
map <int, int>::allocator_type m2_Alloc;
map <int, double>::allocator_type m3_Alloc;
map <int, int>::allocator_type m4_Alloc;
// The following lines declare objects
// that use the default allocator.
map <int, int> m1;
map <int, int, allocator<int> > m2;
map <int, double, allocator<double> > m3;
m1_Alloc = m1.get_allocator( );
m2_Alloc = m2.get_allocator( );
m3_Alloc = m3.get_allocator( );
cout << "The number of integers that can be allocated\n"
<< "before free memory is exhausted: "
<< m2.max_size( ) << ".\n" << endl;
cout << "The number of doubles that can be allocated\n"
<< "before free memory is exhausted: "
<< m3.max_size( ) << ".\n" << endl;
// The following line creates a map m4
// with the allocator of map m1.
map <int, int> m4( less<int>( ), m1_Alloc );
m4_Alloc = m4.get_allocator( );
// Two allocators are interchangeable if
// storage allocated from each can be
// deallocated with the other
if( m1_Alloc == m4_Alloc )
{
cout << "The allocators are interchangeable." << endl;
}
else
{
cout << "The allocators are not interchangeable." << endl;
}
}
insert
Menyisipkan elemen atau rentang elemen ke dalam peta.
// (1) single element
pair<iterator, bool> insert(
const value_type& Val);
// (2) single element, perfect forwarded
template <class ValTy>
pair<iterator, bool>
insert(
ValTy&& Val);
// (3) single element with hint
iterator insert(
const_iterator Where,
const value_type& Val);
// (4) single element, perfect forwarded, with hint
template <class ValTy>
iterator insert(
const_iterator Where,
ValTy&& Val);
// (5) range
template <class InputIterator>
void insert(
InputIterator First,
InputIterator Last);
// (6) initializer list
void insert(
initializer_list<value_type>
IList);
Parameter
Val
Nilai elemen untuk dimasukkan ke dalam peta kecuali sudah berisi elemen yang kuncinya diurutkan secara setara.
Where
Tempat untuk mulai mencari titik penyisipan yang benar. (Jika titik itu segera mendahului Where
, penyisipan dapat terjadi dalam waktu konstanta diamortisasi alih-alih waktu logaritmik.)
ValTy
Parameter templat yang menentukan jenis argumen yang dapat digunakan peta untuk membangun elemen value_type
, dan perfect-forwards Val
sebagai argumen.
First
Posisi elemen pertama yang akan disalin.
Last
Posisi tepat di luar elemen terakhir yang akan disalin.
InputIterator
Argumen fungsi templat yang memenuhi persyaratan iterator input yang menunjuk ke elemen jenis yang dapat digunakan untuk membuat value_type
objek.
IList
dari initializer_list
mana untuk menyalin elemen.
Tampilkan Nilai
Anggota elemen tunggal berfungsi, (1) dan (2), mengembalikan pair
komponen yang bool
benar jika penyisipan dibuat, dan salah jika peta sudah berisi elemen yang kuncinya memiliki nilai yang setara dalam urutan. Komponen iterator dari pasangan nilai kembali menunjuk ke elemen yang baru disisipkan jika bool
komponen tersebut benar, atau ke elemen yang ada jika bool
komponen salah.
Fungsi anggota elemen-dengan-petunjuk tunggal, (3) dan (4), mengembalikan iterator yang menunjuk ke posisi di mana elemen baru dimasukkan ke dalam peta atau, jika elemen dengan kunci yang setara sudah ada, ke elemen yang ada.
Keterangan
Tidak ada iterator, penunjuk, atau referensi yang tidak valid oleh fungsi ini.
Selama penyisipan hanya satu elemen, jika pengecualian dilemparkan, status kontainer tidak dimodifikasi. Selama penyisipan beberapa elemen, jika pengecualian dilemparkan, kontainer dibiarkan dalam status yang tidak ditentukan tetapi valid.
Untuk mengakses komponen pair
pr
iterator yang dikembalikan oleh fungsi anggota elemen tunggal, gunakan pr.first
; untuk mendereferensikan iterator dalam pasangan yang dikembalikan, gunakan *pr.first
, memberi Anda elemen. Untuk mengakses bool
komponen, gunakan pr.second
. Misalnya, lihat kode sampel nanti di artikel ini.
Dari value_type
kontainer adalah typedef milik kontainer, dan untuk peta, map<K, V>::value_type
adalah pair<const K, V>
. Nilai elemen adalah pasangan yang diurutkan di mana komponen pertama sama dengan nilai kunci dan komponen kedua sama dengan nilai data elemen.
Fungsi anggota rentang (5) menyisipkan urutan nilai elemen ke dalam peta yang sesuai dengan setiap elemen yang ditangani oleh iterator dalam rentang [First, Last)
; oleh karena itu, Last
tidak disisipkan. Fungsi end()
anggota kontainer mengacu pada posisi tepat setelah elemen terakhir dalam kontainer—misalnya, pernyataan m.insert(v.begin(), v.end());
mencoba menyisipkan semua elemen v
ke dalam m
. Hanya elemen yang memiliki nilai unik dalam rentang yang disisipkan; duplikat diabaikan. Untuk mengamati elemen mana yang ditolak, gunakan versi elemen tunggal dari insert
.
Fungsi anggota daftar penginisialisasi (6) menggunakan initializer_list
untuk menyalin elemen ke dalam peta.
Untuk penyisipan elemen yang dibangun di tempat—yaitu, tidak ada operasi salin atau pemindahan yang dilakukan—lihat map::emplace
dan map::emplace_hint
.
Contoh
// map_insert.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
#include <string>
#include <vector>
#include <utility> // make_pair()
using namespace std;
template <typename M> void print(const M& m) {
cout << m.size() << " elements: ";
for (const auto& p : m) {
cout << "(" << p.first << ", " << p.second << ") ";
}
cout << endl;
}
int main()
{
// insert single values
map<int, int> m1;
// call insert(const value_type&) version
m1.insert({ 1, 10 });
// call insert(ValTy&&) version
m1.insert(make_pair(2, 20));
cout << "The original key and mapped values of m1 are:" << endl;
print(m1);
// intentionally attempt a duplicate, single element
auto ret = m1.insert(make_pair(1, 111));
if (!ret.second){
auto pr = *ret.first;
cout << "Insert failed, element with key value 1 already exists."
<< endl << " The existing element is (" << pr.first << ", " << pr.second << ")"
<< endl;
}
else{
cout << "The modified key and mapped values of m1 are:" << endl;
print(m1);
}
cout << endl;
// single element, with hint
m1.insert(m1.end(), make_pair(3, 30));
cout << "The modified key and mapped values of m1 are:" << endl;
print(m1);
cout << endl;
// The templatized version inserting a jumbled range
map<int, int> m2;
vector<pair<int, int>> v;
v.push_back(make_pair(43, 294));
v.push_back(make_pair(41, 262));
v.push_back(make_pair(45, 330));
v.push_back(make_pair(42, 277));
v.push_back(make_pair(44, 311));
cout << "Inserting the following vector data into m2:" << endl;
print(v);
m2.insert(v.begin(), v.end());
cout << "The modified key and mapped values of m2 are:" << endl;
print(m2);
cout << endl;
// The templatized versions move-constructing elements
map<int, string> m3;
pair<int, string> ip1(475, "blue"), ip2(510, "green");
// single element
m3.insert(move(ip1));
cout << "After the first move insertion, m3 contains:" << endl;
print(m3);
// single element with hint
m3.insert(m3.end(), move(ip2));
cout << "After the second move insertion, m3 contains:" << endl;
print(m3);
cout << endl;
map<int, int> m4;
// Insert the elements from an initializer_list
m4.insert({ { 4, 44 }, { 2, 22 }, { 3, 33 }, { 1, 11 }, { 5, 55 } });
cout << "After initializer_list insertion, m4 contains:" << endl;
print(m4);
cout << endl;
}
iterator
Jenis yang menyediakan iterator dua arah yang dapat membaca atau memodifikasi elemen apa pun dalam peta.
typedef implementation-defined iterator;
Keterangan
Iterator yang ditentukan oleh peta menunjuk ke elemen yang merupakan objek dari , yaitu jenis value_type
pair<const Key, Type>
, yang anggota pertamanya adalah kunci untuk elemen dan yang anggota keduanya adalah datum yang dipetakan yang dipegang oleh elemen .
Untuk mendereferensikan Iterator Iterator yang menunjuk ke elemen dalam peta, gunakan ->
operator.
Untuk mengakses nilai kunci untuk elemen , gunakan Iter->first
, yang setara dengan (*Iter).first
. Untuk mengakses nilai datum yang dipetakan untuk elemen , gunakan Iter->second
, yang setara dengan (*Iter).second
.
Contoh
Lihat contoh untuk begin
contoh cara mendeklarasikan dan menggunakan iterator
.
key_comp
Mengambil salinan objek perbandingan yang digunakan untuk mengurutkan kunci dalam peta.
key_compare key_comp() const;
Tampilkan Nilai
Mengembalikan objek fungsi yang digunakan peta untuk mengurutkan elemennya.
Keterangan
Objek tersimpan menentukan fungsi anggota
bool operator(const Key& left, const Key& right);
yang mengembalikan true
jika left
mendahului dan tidak sama dengan right
dalam urutan pengurutan.
Contoh
// map_key_comp.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int, less<int> > m1;
map <int, int, less<int> >::key_compare kc1 = m1.key_comp( ) ;
bool result1 = kc1( 2, 3 ) ;
if( result1 == true )
{
cout << "kc1( 2,3 ) returns value of true, "
<< "where kc1 is the function object of m1."
<< endl;
}
else
{
cout << "kc1( 2,3 ) returns value of false "
<< "where kc1 is the function object of m1."
<< endl;
}
map <int, int, greater<int> > m2;
map <int, int, greater<int> >::key_compare kc2 = m2.key_comp( );
bool result2 = kc2( 2, 3 ) ;
if( result2 == true )
{
cout << "kc2( 2,3 ) returns value of true, "
<< "where kc2 is the function object of m2."
<< endl;
}
else
{
cout << "kc2( 2,3 ) returns value of false, "
<< "where kc2 is the function object of m2."
<< endl;
}
}
kc1( 2,3 ) returns value of true, where kc1 is the function object of m1.
kc2( 2,3 ) returns value of false, where kc2 is the function object of m2.
key_compare
Jenis yang menyediakan objek fungsi yang dapat membandingkan dua kunci pengurutan untuk menentukan urutan relatif dua elemen di map
.
typedef Traits key_compare;
Keterangan
key_compare
adalah sinonim untuk parameter Traits
templat .
Untuk informasi selengkapnya tentang Traits
, lihat map
topik Kelas .
Contoh
Lihat contoh untuk key_comp
contoh cara mendeklarasikan dan menggunakan key_compare
.
key_type
Jenis yang menjelaskan kunci pengurutan yang disimpan di setiap elemen peta.
typedef Key key_type;
Keterangan
key_type
adalah sinonim untuk parameter Key
templat .
Untuk informasi selengkapnya tentang Key
, lihat bagian Keterangan dari map
topik Kelas .
Contoh
Lihat contoh untuk value_type
contoh cara mendeklarasikan dan menggunakan key_type
.
lower_bound
Mengembalikan iterator ke elemen pertama dalam peta dengan nilai kunci yang sama dengan atau lebih besar dari kunci yang ditentukan.
iterator lower_bound(const Key& key);
const_iterator lower_bound(const Key& key) const;
Parameter
key
Nilai kunci argumen yang akan dibandingkan dengan kunci pengurutan elemen dari peta yang sedang dicari.
Tampilkan Nilai
iterator
Atau const_iterator
yang membahas lokasi elemen dalam peta yang dengan kunci yang sama dengan atau lebih besar dari kunci argumen, atau yang membahas lokasi yang menggantikan elemen terakhir dalam map
jika tidak ada kecocokan yang ditemukan untuk kunci.
Jika nilai lower_bound
pengembalian ditetapkan ke const_iterator
, objek peta tidak dapat dimodifikasi. Jika nilai lower_bound
pengembalian ditetapkan ke iterator
, objek peta dapat dimodifikasi.
Contoh
// map_lower_bound.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int> m1;
map <int, int> :: const_iterator m1_AcIter, m1_RcIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m1_RcIter = m1.lower_bound( 2 );
cout << "The first element of map m1 with a key of 2 is: "
<< m1_RcIter -> second << "." << endl;
// If no match is found for this key, end( ) is returned
m1_RcIter = m1. lower_bound ( 4 );
if ( m1_RcIter == m1.end( ) )
cout << "The map m1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of map m1 with a key of 4 is: "
<< m1_RcIter -> second << "." << endl;
// The element at a specific location in the map can be found
// using a dereferenced iterator addressing the location
m1_AcIter = m1.end( );
m1_AcIter--;
m1_RcIter = m1. lower_bound ( m1_AcIter -> first );
cout << "The element of m1 with a key matching "
<< "that of the last element is: "
<< m1_RcIter -> second << "." << endl;
}
The first element of map m1 with a key of 2 is: 20.
The map m1 doesn't have an element with a key of 4.
The element of m1 with a key matching that of the last element is: 30.
map
Membuat peta yang kosong atau merupakan salinan dari semua atau sebagian dari beberapa peta lainnya.
map();
explicit map(
const Traits& Comp);
map(
const Traits& Comp,
const Allocator& Al);
map(
const map& Right);
map(
map&& Right);
map(
initializer_list<value_type> IList);
map(
initializer_list<value_type> IList,
const Traits& Comp);
map(
initializer_list<value_type> IList,
const Traits& Comp,
const Allocator& Allocator);
template <class InputIterator>
map(
InputIterator First,
InputIterator Last);
template <class InputIterator>
map(
InputIterator First,
InputIterator Last,
const Traits& Comp);
template <class InputIterator>
map(
InputIterator First,
InputIterator Last,
const Traits& Comp,
const Allocator& Al);
Parameter
Al
Kelas alokator penyimpanan yang akan digunakan untuk objek peta ini, yang default ke Allocator
.
Comp
Fungsi perbandingan jenis const Traits
yang digunakan untuk mengurutkan elemen dalam map
, yang default ke hash_compare
.
Right
Peta tempat set yang dibangun akan menjadi salinan.
First
Posisi elemen pertama dalam rentang elemen yang akan disalin.
Last
Posisi elemen pertama di luar rentang elemen yang akan disalin.
IList
initializer_list dari mana elemen akan disalin.
Keterangan
Semua konstruktor menyimpan jenis objek alokator yang mengelola penyimpanan memori untuk peta dan yang nantinya dapat dikembalikan dengan memanggil get_allocator
. Parameter alokator sering dihilangkan dalam deklarasi kelas dan makro praproses yang digunakan untuk menggantikan alokator alternatif.
Semua konstruktor menginisialisasi peta mereka.
Semua konstruktor menyimpan objek fungsi jenis Sifat yang digunakan untuk membuat pesanan di antara kunci peta dan yang nantinya dapat dikembalikan dengan memanggil key_comp
.
Tiga konstruktor pertama menentukan peta awal kosong, yang kedua menentukan jenis fungsi perbandingan (Comp
) yang akan digunakan dalam menetapkan urutan elemen dan yang ketiga secara eksplisit menentukan jenis alokator (Al
) yang akan digunakan. Kata explicit
kunci menekan jenis konversi jenis otomatis tertentu.
Konstruktor keempat menentukan salinan peta Right
.
Konstruktor kelima menentukan salinan peta dengan memindahkan Right
.
Konstruktor ke-6, ke-7, dan ke-8 menggunakan initializer_list
tempat untuk menyalin anggota.
Tiga konstruktor berikutnya menyalin rentang [First, Last)
peta dengan meningkatkan eksplisititas dalam menentukan jenis fungsi perbandingan kelas Traits
dan alokator.
Contoh
// map_map.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main()
{
using namespace std;
typedef pair <int, int> Int_Pair;
map <int, int>::iterator m1_Iter, m3_Iter, m4_Iter, m5_Iter, m6_Iter, m7_Iter;
map <int, int, less<int> >::iterator m2_Iter;
// Create an empty map m0 of key type integer
map <int, int> m0;
// Create an empty map m1 with the key comparison
// function of less than, then insert 4 elements
map <int, int, less<int> > m1;
m1.insert(Int_Pair(1, 10));
m1.insert(Int_Pair(2, 20));
m1.insert(Int_Pair(3, 30));
m1.insert(Int_Pair(4, 40));
// Create an empty map m2 with the key comparison
// function of greater than, then insert 2 elements
map <int, int, less<int> > m2;
m2.insert(Int_Pair(1, 10));
m2.insert(Int_Pair(2, 20));
// Create a map m3 with the
// allocator of map m1
map <int, int>::allocator_type m1_Alloc;
m1_Alloc = m1.get_allocator();
map <int, int> m3(less<int>(), m1_Alloc);
m3.insert(Int_Pair(3, 30));
// Create a copy, map m4, of map m1
map <int, int> m4(m1);
// Create a map m5 by copying the range m1[ first, last)
map <int, int>::const_iterator m1_bcIter, m1_ecIter;
m1_bcIter = m1.begin();
m1_ecIter = m1.begin();
m1_ecIter++;
m1_ecIter++;
map <int, int> m5(m1_bcIter, m1_ecIter);
// Create a map m6 by copying the range m4[ first, last)
// and with the allocator of map m2
map <int, int>::allocator_type m2_Alloc;
m2_Alloc = m2.get_allocator();
map <int, int> m6(m4.begin(), ++m4.begin(), less<int>(), m2_Alloc);
cout << "m1 =";
for (auto i : m1)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m2 =";
for(auto i : m2)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m3 =";
for (auto i : m3)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m4 =";
for (auto i : m4)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m5 =";
for (auto i : m5)
cout << i.first << " " << i.second << ", ";
cout << endl;
cout << "m6 =";
for (auto i : m6)
cout << i.first << " " << i.second << ", ";
cout << endl;
// Create a map m7 by moving m5
cout << "m7 =";
map<int, int> m7(move(m5));
for (auto i : m7)
cout << i.first << " " << i.second << ", ";
cout << endl;
// Create a map m8 by copying in an initializer_list
map<int, int> m8{ { { 1, 1 }, { 2, 2 }, { 3, 3 }, { 4, 4 } } };
cout << "m8: = ";
for (auto i : m8)
cout << i.first << " " << i.second << ", ";
cout << endl;
// Create a map m9 with an initializer_list and a comparator
map<int, int> m9({ { 5, 5 }, { 6, 6 }, { 7, 7 }, { 8, 8 } }, less<int>());
cout << "m9: = ";
for (auto i : m9)
cout << i.first << " " << i.second << ", ";
cout << endl;
// Create a map m10 with an initializer_list, a comparator, and an allocator
map<int, int> m10({ { 9, 9 }, { 10, 10 }, { 11, 11 }, { 12, 12 } }, less<int>(), m9.get_allocator());
cout << "m10: = ";
for (auto i : m10)
cout << i.first << " " << i.second << ", ";
cout << endl;
}
mapped_type
Jenis yang mewakili data yang disimpan dalam peta.
typedef Type mapped_type;
Keterangan
Jenisnya mapped_type
adalah sinonim untuk parameter templat Jenis kelas.
Untuk informasi selengkapnya tentang Type
, lihat map
topik Kelas .
Contoh
Lihat contoh untuk value_type
contoh cara mendeklarasikan dan menggunakan mapped_type
.
max_size
Mengembalikan panjang maksimum peta.
size_type max_size() const;
Tampilkan Nilai
Panjang maksimum peta yang mungkin.
Contoh
// map_max_size.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int> m1;
map <int, int> :: size_type i;
i = m1.max_size( );
cout << "The maximum possible length "
<< "of the map is " << i << "."
<< endl << "(Magnitude is machine specific.)";
}
operator[]
Menyisipkan elemen ke dalam peta dengan nilai kunci tertentu.
Type& operator[](const Key& key);
Type& operator[](Key&& key);
Parameter
key
Nilai kunci elemen yang akan disisipkan.
Tampilkan Nilai
Referensi ke nilai data elemen yang disisipkan.
Keterangan
Jika nilai kunci argumen tidak ditemukan, maka nilai tersebut disisipkan bersama dengan nilai default jenis data.
operator[]
dapat digunakan untuk menyisipkan elemen ke dalam peta m
menggunakan di mana DataValue
adalah nilai mapped_type
elemen dengan nilai key
m[key] = DataValue;
kunci .
Saat menggunakan operator[]
untuk menyisipkan elemen, referensi yang dikembalikan tidak menunjukkan apakah penyisipan mengubah elemen yang sudah ada sebelumnya atau membuat yang baru. Anggota berfungsi find
dan insert
dapat digunakan untuk menentukan apakah elemen dengan kunci tertentu sudah ada sebelum penyisipan.
Contoh
// map_op_insert.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
#include <string>
int main( )
{
using namespace std;
typedef pair <const int, int> cInt2Int;
map <int, int> m1;
map <int, int> :: iterator pIter;
// Insert a data value of 10 with a key of 1
// into a map using the operator[] member function
m1[ 1 ] = 10;
// Compare other ways to insert objects into a map
m1.insert ( map <int, int> :: value_type ( 2, 20 ) );
m1.insert ( cInt2Int ( 3, 30 ) );
cout << "The keys of the mapped elements are:";
for ( pIter = m1.begin( ) ; pIter != m1.end( ) ; pIter++ )
cout << " " << pIter -> first;
cout << "." << endl;
cout << "The values of the mapped elements are:";
for ( pIter = m1.begin( ) ; pIter != m1.end( ) ; pIter++ )
cout << " " << pIter -> second;
cout << "." << endl;
// If the key already exists, operator[]
// changes the value of the datum in the element
m1[ 2 ] = 40;
// operator[] will also insert the value of the data
// type's default constructor if the value is unspecified
m1[5];
cout << "The keys of the mapped elements are now:";
for ( pIter = m1.begin( ) ; pIter != m1.end( ) ; pIter++ )
cout << " " << pIter -> first;
cout << "." << endl;
cout << "The values of the mapped elements are now:";
for ( pIter = m1.begin( ) ; pIter != m1.end( ) ; pIter++ )
cout << " " << pIter -> second;
cout << "." << endl;
// insert by moving key
map<string, int> c2;
string str("abc");
cout << "c2[move(str)] == " << c2[move(str)] << endl;
cout << "c2["abc"] == " << c2["abc"] << endl;
return (0);
}
The keys of the mapped elements are: 1 2 3.
The values of the mapped elements are: 10 20 30.
The keys of the mapped elements are now: 1 2 3 5.
The values of the mapped elements are now: 10 40 30 0.
c2[move(str)] == 0
c2["abc"] == 1
operator=
Mengganti elemen peta dengan salinan peta lain.
map& operator=(const map& right);
map& operator=(map&& right);
Parameter
right
yang map
sedang disalin ke map
dalam .
Keterangan
Setelah menghapus elemen yang ada dalam map
, operator=
salin atau pindahkan konten right
ke dalam peta.
Contoh
// map_operator_as.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map<int, int> v1, v2, v3;
map<int, int>::iterator iter;
v1.insert(pair<int, int>(1, 10));
cout << "v1 = " ;
for (iter = v1.begin(); iter != v1.end(); iter++)
cout << iter->second << " ";
cout << endl;
v2 = v1;
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << iter->second << " ";
cout << endl;
// move v1 into v2
v2.clear();
v2 = move(v1);
cout << "v2 = ";
for (iter = v2.begin(); iter != v2.end(); iter++)
cout << iter->second << " ";
cout << endl;
}
pointer
Jenis yang menyediakan penunjuk ke elemen dalam peta.
typedef typename allocator_type::pointer pointer;
Keterangan
Jenis pointer
dapat digunakan untuk mengubah nilai elemen.
Dalam kebanyakan kasus, harus iterator
digunakan untuk mengakses elemen dalam objek peta.
rbegin
Mengembalikan iterator yang menangani elemen pertama dalam peta terbalik.
const_reverse_iterator rbegin() const;
reverse_iterator rbegin();
Tampilkan Nilai
Iterator dua arah terbalik yang membahas elemen pertama dalam peta terbalik atau mengatasi apa yang telah menjadi elemen terakhir dalam peta yang tidak terbalik.
Keterangan
rbegin
digunakan dengan peta terbalik seperti begin
yang digunakan dengan peta.
Jika nilai rbegin
pengembalian ditetapkan ke const_reverse_iterator
, maka objek peta tidak dapat dimodifikasi. Jika nilai rbegin
pengembalian ditetapkan ke reverse_iterator
, maka objek peta dapat dimodifikasi.
rbegin
dapat digunakan untuk melakukan iterasi melalui peta ke belakang.
Contoh
// map_rbegin.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int> m1;
map <int, int> :: iterator m1_Iter;
map <int, int> :: reverse_iterator m1_rIter;
map <int, int> :: const_reverse_iterator m1_crIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m1_rIter = m1.rbegin( );
cout << "The first element of the reversed map m1 is "
<< m1_rIter -> first << "." << endl;
// begin can be used to start an iteration
// through a map in a forward order
cout << "The map is: ";
for ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end( ); m1_Iter++)
cout << m1_Iter -> first << " ";
cout << "." << endl;
// rbegin can be used to start an iteration
// through a map in a reverse order
cout << "The reversed map is: ";
for ( m1_rIter = m1.rbegin( ) ; m1_rIter != m1.rend( ); m1_rIter++)
cout << m1_rIter -> first << " ";
cout << "." << endl;
// A map element can be erased by dereferencing to its key
m1_rIter = m1.rbegin( );
m1.erase ( m1_rIter -> first );
m1_rIter = m1.rbegin( );
cout << "After the erasure, the first element "
<< "in the reversed map is "
<< m1_rIter -> first << "." << endl;
}
The first element of the reversed map m1 is 3.
The map is: 1 2 3 .
The reversed map is: 3 2 1 .
After the erasure, the first element in the reversed map is 2.
reference
Jenis yang menyediakan referensi ke elemen yang disimpan dalam peta.
typedef typename allocator_type::reference reference;
Contoh
// map_reference.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int> m1;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
// Declare and initialize a const_reference &Ref1
// to the key of the first element
const int &Ref1 = ( m1.begin( ) -> first );
// The following line would cause an error because the
// non-const_reference can't be used to access the key
// int &Ref1 = ( m1.begin( ) -> first );
cout << "The key of first element in the map is "
<< Ref1 << "." << endl;
// Declare and initialize a reference &Ref2
// to the data value of the first element
int &Ref2 = ( m1.begin( ) -> second );
cout << "The data value of first element in the map is "
<< Ref2 << "." << endl;
//The non-const_reference can be used to modify the
//data value of the first element
Ref2 = Ref2 + 5;
cout << "The modified data value of first element is "
<< Ref2 << "." << endl;
}
The key of first element in the map is 1.
The data value of first element in the map is 10.
The modified data value of first element is 15.
rend
Mengembalikan iterator yang membahas lokasi yang menggantikan elemen terakhir dalam peta terbalik.
const_reverse_iterator rend() const;
reverse_iterator rend();
Tampilkan Nilai
Iterator dua arah terbalik yang membahas lokasi yang menggantikan elemen terakhir dalam peta terbalik (lokasi yang telah mendahului elemen pertama di peta yang tidak terbalik).
Keterangan
rend
digunakan dengan peta terbalik seperti end
yang digunakan dengan peta.
Jika nilai rend
pengembalian ditetapkan ke const_reverse_iterator
, maka objek peta tidak dapat dimodifikasi. Jika nilai rend
pengembalian ditetapkan ke reverse_iterator
, maka objek peta dapat dimodifikasi.
rend
dapat digunakan untuk menguji apakah iterator terbalik telah mencapai akhir petanya.
Nilai yang dikembalikan oleh rend
tidak boleh didereferensikan.
Contoh
// map_rend.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int> m1;
map <int, int> :: iterator m1_Iter;
map <int, int> :: reverse_iterator m1_rIter;
map <int, int> :: const_reverse_iterator m1_crIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m1_rIter = m1.rend( );
m1_rIter--;
cout << "The last element of the reversed map m1 is "
<< m1_rIter -> first << "." << endl;
// begin can be used to start an iteration
// through a map in a forward order
cout << "The map is: ";
for ( m1_Iter = m1.begin( ) ; m1_Iter != m1.end( ); m1_Iter++)
cout << m1_Iter -> first << " ";
cout << "." << endl;
// rbegin can be used to start an iteration
// through a map in a reverse order
cout << "The reversed map is: ";
for ( m1_rIter = m1.rbegin( ) ; m1_rIter != m1.rend( ); m1_rIter++)
cout << m1_rIter -> first << " ";
cout << "." << endl;
// A map element can be erased by dereferencing to its key
m1_rIter = --m1.rend( );
m1.erase ( m1_rIter -> first );
m1_rIter = m1.rend( );
m1_rIter--;
cout << "After the erasure, the last element "
<< "in the reversed map is "
<< m1_rIter -> first << "." << endl;
}
The last element of the reversed map m1 is 1.
The map is: 1 2 3 .
The reversed map is: 3 2 1 .
After the erasure, the last element in the reversed map is 2.
reverse_iterator
Jenis yang menyediakan iterator dua arah yang dapat membaca atau memodifikasi elemen dalam peta terbalik.
typedef std::reverse_iterator<iterator> reverse_iterator;
Keterangan
Jenis reverse_iterator
tidak dapat mengubah nilai elemen dan digunakan untuk melakukan iterasi melalui peta secara terbalik.
yang reverse_iterator
ditentukan oleh peta menunjuk ke elemen yang merupakan objek dari , yaitu jenis value_type
pair<const Key, Type>
, yang anggota pertamanya adalah kunci elemen dan anggota keduanya adalah datum yang dipetakan yang dipegang oleh elemen .
Untuk mendereferensikan rIter yang reverse_iterator
menunjuk ke elemen dalam peta, gunakan ->
operator.
Untuk mengakses nilai kunci untuk elemen , gunakan rIter
->first, yang setara dengan (* rIter
). pertama. Untuk mengakses nilai datum yang dipetakan untuk elemen, gunakan rIter
->second, yang setara dengan (* rIter
). pertama.
Contoh
Lihat contoh untuk rbegin
contoh cara mendeklarasikan dan menggunakan reverse_iterator
.
size
Mengembalikan jumlah elemen dalam map
.
size_type size() const;
Tampilkan Nilai
Panjang peta saat ini.
Contoh
Contoh berikut menunjukkan penggunaan map::size
fungsi anggota.
// map_size.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main()
{
using namespace std;
map<int, int> m1, m2;
map<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
m1.insert(Int_Pair(1, 1));
i = m1.size();
cout << "The map length is " << i << "." << endl;
m1.insert(Int_Pair(2, 4));
i = m1.size();
cout << "The map length is now " << i << "." << endl;
}
The map length is 1.
The map length is now 2.
size_type
Jenis bilangan bulat yang tidak ditandatangani yang dapat mewakili jumlah elemen dalam peta.
typedef typename allocator_type::size_type size_type;
Contoh
Lihat contoh untuk size
contoh cara mendeklarasikan dan menggunakan size_type
.
pertukaran
Menukar elemen dari dua peta.
void swap(
map<Key, Type, Traits, Allocator>& right);
Parameter
right
Peta argumen yang menyediakan elemen yang akan ditukar dengan peta target.
Keterangan
Fungsi anggota tidak membatalkan referensi, pointer, atau iterator yang menunjuk elemen dalam dua peta yang elemennya sedang ditukar.
Contoh
// map_swap.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int> m1, m2, m3;
map <int, int>::iterator m1_Iter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m2.insert ( Int_Pair ( 10, 100 ) );
m2.insert ( Int_Pair ( 20, 200 ) );
m3.insert ( Int_Pair ( 30, 300 ) );
cout << "The original map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout << "." << endl;
// This is the member function version of swap
//m2 is said to be the argument map; m1 the target map
m1.swap( m2 );
cout << "After swapping with m2, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout << "." << endl;
// This is the specialized template version of swap
swap( m1, m3 );
cout << "After swapping with m3, map m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout << "." << endl;
}
The original map m1 is: 10 20 30.
After swapping with m2, map m1 is: 100 200.
After swapping with m3, map m1 is: 300.
upper_bound
Mengembalikan iterator ke elemen pertama dalam peta yang dengan kunci memiliki nilai yang lebih besar dari kunci yang ditentukan.
iterator upper_bound(const Key& key);
const_iterator upper_bound(const Key& key) const;
Parameter
key
Nilai kunci argumen yang akan dibandingkan dengan nilai kunci pengurutan elemen dari peta yang sedang dicari.
Tampilkan Nilai
iterator
Atau const_iterator
yang membahas lokasi elemen dalam peta yang dengan kunci yang lebih besar dari kunci argumen, atau yang membahas lokasi yang menggantikan elemen terakhir dalam map
jika tidak ada kecocokan yang ditemukan untuk kunci.
Jika nilai pengembalian ditetapkan ke const_iterator
, objek peta tidak dapat dimodifikasi. Jika nilai pengembalian ditetapkan ke iterator
, objek peta dapat dimodifikasi.
Contoh
// map_upper_bound.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int> m1;
map <int, int> :: const_iterator m1_AcIter, m1_RcIter;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 10 ) );
m1.insert ( Int_Pair ( 2, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m1_RcIter = m1.upper_bound( 2 );
cout << "The first element of map m1 with a key "
<< "greater than 2 is: "
<< m1_RcIter -> second << "." << endl;
// If no match is found for the key, end is returned
m1_RcIter = m1. upper_bound ( 4 );
if ( m1_RcIter == m1.end( ) )
cout << "The map m1 doesn't have an element "
<< "with a key greater than 4." << endl;
else
cout << "The element of map m1 with a key > 4 is: "
<< m1_RcIter -> second << "." << endl;
// The element at a specific location in the map can be found
// using a dereferenced iterator addressing the location
m1_AcIter = m1.begin( );
m1_RcIter = m1. upper_bound ( m1_AcIter -> first );
cout << "The 1st element of m1 with a key greater than\n"
<< "that of the initial element of m1 is: "
<< m1_RcIter -> second << "." << endl;
}
The first element of map m1 with a key greater than 2 is: 30.
The map m1 doesn't have an element with a key greater than 4.
The 1st element of m1 with a key greater than
that of the initial element of m1 is: 20.
value_comp
Fungsi anggota mengembalikan objek fungsi yang menentukan urutan elemen dalam peta dengan membandingkan nilai kuncinya.
value_compare value_comp() const;
Tampilkan Nilai
Mengembalikan objek fungsi perbandingan yang digunakan peta untuk mengurutkan elemennya.
Keterangan
Untuk peta m, jika dua elemen e1(k1, d1) dan e2(k2, d2) adalah objek jenis value_type
, di mana k1 dan k1 adalah kunci jenisnya key_type
dan d1 dan d2 adalah data jenisnya mapped_type
, maka m.value_comp(e1, e2)
setara dengan m.key_comp(k1, k2)
. Objek tersimpan menentukan fungsi anggota
bool operator( value_type& left, value_type& right);
yang mengembalikan true
jika nilai left
kunci dari presede dan tidak sama dengan nilai kunci dalam urutan pengurutan right
.
Contoh
// map_value_comp.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
map <int, int, less<int> > m1;
map <int, int, less<int> >::value_compare vc1 = m1.value_comp( );
pair< map<int,int>::iterator, bool > pr1, pr2;
pr1= m1.insert ( map <int, int> :: value_type ( 1, 10 ) );
pr2= m1.insert ( map <int, int> :: value_type ( 2, 5 ) );
if( vc1( *pr1.first, *pr2.first ) == true )
{
cout << "The element ( 1,10 ) precedes the element ( 2,5 )."
<< endl;
}
else
{
cout << "The element ( 1,10 ) does not precede the element ( 2,5 )."
<< endl;
}
if(vc1( *pr2.first, *pr1.first ) == true )
{
cout << "The element ( 2,5 ) precedes the element ( 1,10 )."
<< endl;
}
else
{
cout << "The element ( 2,5 ) does not precede the element ( 1,10 )."
<< endl;
}
}
The element ( 1,10 ) precedes the element ( 2,5 ).
The element ( 2,5 ) does not precede the element ( 1,10 ).
value_type
Jenis objek yang disimpan sebagai elemen dalam peta.
typedef pair<const Key, Type> value_type;
Contoh
// map_value_type.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
typedef pair <const int, int> cInt2Int;
map <int, int> m1;
map <int, int> :: key_type key1;
map <int, int> :: mapped_type mapped1;
map <int, int> :: value_type value1;
map <int, int> :: iterator pIter;
// value_type can be used to pass the correct type
// explicitly to avoid implicit type conversion
m1.insert ( map <int, int> :: value_type ( 1, 10 ) );
// Compare other ways to insert objects into a map
m1.insert ( cInt2Int ( 2, 20 ) );
m1[ 3 ] = 30;
// Initializing key1 and mapped1
key1 = ( m1.begin( ) -> first );
mapped1 = ( m1.begin( ) -> second );
cout << "The key of first element in the map is "
<< key1 << "." << endl;
cout << "The data value of first element in the map is "
<< mapped1 << "." << endl;
// The following line would cause an error because
// the value_type isn't assignable
// value1 = cInt2Int ( 4, 40 );
cout << "The keys of the mapped elements are:";
for ( pIter = m1.begin( ) ; pIter != m1.end( ) ; pIter++ )
cout << " " << pIter -> first;
cout << "." << endl;
cout << "The values of the mapped elements are:";
for ( pIter = m1.begin( ) ; pIter != m1.end( ) ; pIter++ )
cout << " " << pIter -> second;
cout << "." << endl;
}
Lihat juga
Kontainer
Keamanan utas di Pustaka Standar C++
Referensi pustaka standar C++