multimap
Kelas
Kelas multimap Pustaka Standar C++ digunakan untuk penyimpanan dan pengambilan data dari koleksi di mana setiap elemen adalah pasangan yang memiliki nilai data dan kunci pengurutan. Nilai kunci tidak perlu unik dan digunakan untuk memesan data secara otomatis. Nilai elemen dalam multimap, tetapi bukan nilai kunci terkait, dapat diubah secara langsung. Sebaliknya, nilai kunci yang terkait dengan elemen lama harus dihapus dan nilai kunci baru yang terkait dengan elemen baru yang disisipkan.
Sintaks
template <class Key,
class Type,
class Traits=less <Key>,
class Allocator=allocator <pair <const Key, Type>>>
class multimap;
Parameter
Key
Jenis data kunci yang akan disimpan dalam multimap.
Type
Jenis data elemen yang akan disimpan dalam multimap.
Traits
Jenis yang menyediakan objek fungsi yang dapat membandingkan dua nilai elemen sebagai kunci pengurutan untuk menentukan urutan relatifnya dalam multimap. Predikat less<Key>
biner adalah nilai default.
Di C++14 Anda dapat mengaktifkan pencarian heterogen dengan menentukan std::less<>
atau std::greater<>
predikat yang tidak memiliki parameter jenis. Untuk informasi selengkapnya, lihat Pencarian Heterogen di Kontainer Asosiatif
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 multimap Pustaka Standar C++ adalah
Kontainer asosiatif, yang merupakan kontainer ukuran variabel yang mendukung pengambilan nilai elemen yang efisien berdasarkan nilai kunci terkait.
Dapat dibalik, karena menyediakan iterator dua arah untuk mengakses elemennya.
Diurutkan, karena elemennya diurutkan menurut nilai kunci dalam kontainer sesuai dengan fungsi perbandingan yang ditentukan.
Beberapa, karena elemennya tidak perlu memiliki kunci unik, sehingga satu nilai kunci mungkin memiliki banyak nilai data elemen yang terkait dengannya.
Kontainer asosiatif pasangan, karena nilai data elemennya berbeda dari nilai kuncinya.
Templat kelas, karena fungsionalitas yang disediakannya umum dan sangat independen dari jenis data tertentu yang terkandung sebagai elemen atau kunci. Jenis data yang akan digunakan untuk elemen dan kunci, sebagai gantinya, ditentukan sebagai parameter dalam templat kelas bersama dengan fungsi perbandingan dan alokator.
Iterator yang disediakan oleh kelas peta adalah iterator dua arah, tetapi anggota kelas berfungsi insert
dan multimap
memiliki versi yang mengambil sebagai parameter templat iterator input yang lebih lemah, yang persyaratan fungsionalitasnya lebih minimal daripada yang dijamin oleh kelas iterator dua arah. Konsep iterator yang berbeda membentuk keluarga yang terkait dengan penyempurnaan dalam fungsionalitasnya. Setiap konsep iterator memiliki serangkaian persyaratannya sendiri dan algoritma yang bekerja dengan mereka harus membatasi asumsi mereka terhadap persyaratan yang disediakan oleh jenis iterator tersebut. Mungkin diasumsikan bahwa iterator input dapat didereferensikan untuk merujuk ke beberapa objek dan bahwa itu mungkin akan dinaikkan ke iterator berikutnya dalam urutan. Ini adalah serangkaian fungsionalitas minimal, tetapi cukup untuk dapat berbicara dengan bermakna tentang berbagai iterator [First, Last)
dalam konteks fungsi anggota kelas.
Pilihan jenis kontainer harus didasarkan secara umum 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 efisien, melakukannya dalam waktu rata-rata sebanding dengan logaritma jumlah elemen dalam kontainer. Menyisipkan elemen tidak membatalkan iterator, dan menghapus elemen hanya membatalkan iterator yang telah menunjuk elemen yang dihapus.
multimap
harus menjadi kontainer pilihan asosiatif ketika kondisi mengaitkan nilai dengan kuncinya dipenuhi oleh aplikasi. Model untuk jenis struktur ini adalah daftar kata kunci yang diurutkan dengan nilai string terkait yang menyediakan, misalnya, definisi, di mana kata-kata tidak selalu ditentukan secara unik. Jika, sebaliknya, kata-kata kunci didefinisikan secara unik sehingga kunci unik, maka peta akan menjadi kontainer pilihan. Jika, di sisi lain, hanya daftar kata yang disimpan, maka satu set akan menjadi kontainer yang benar. Jika beberapa kemunculan kata-kata diizinkan, maka multiset
akan menjadi struktur kontainer yang sesuai.
Urutan multimap
yang dikontrolnya dengan memanggil objek fungsi tersimpan jenis key_compare
. Objek tersimpan ini adalah fungsi perbandingan yang dapat diakses dengan memanggil fungsi key_comp
anggota . Secara umum, elemen-elemen hanya perlu kurang dari sebanding untuk menetapkan urutan ini: sehingga, mengingat dua elemen, dapat ditentukan baik bahwa mereka setara (dalam arti bahwa tidak kurang dari yang lain) atau yang satu itu kurang dari yang lain. Ini menghasilkan pengurutan antara elemen yang tidak setara. Pada catatan yang lebih teknis, fungsi perbandingan adalah predikat biner yang menginduksi urutan lemah yang ketat dalam arti matematika standar. Predikat f(x,y)
biner adalah objek fungsi yang memiliki dua objek x
argumen dan y
dan nilai true
pengembalian atau false
. Pemesanan yang diberlakukan pada satu set adalah urutan lemah yang ketat jika predikat biner tidak refleksif, antisimmetris, dan transitif dan jika kesetaraan transitif, di mana dua objek x
dan y
didefinisikan setara ketika keduanya f(x,y)
dan f(y,x)
.false
Jika kondisi kesetaraan yang lebih kuat antara kunci menggantikan kesetaraan, maka pengurutan menjadi total (dalam arti bahwa semua elemen diurutkan sehubungan satu sama lain) dan kunci yang cocok akan tidak dapat dicermati 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
Konstruktor | Deskripsi |
---|---|
multimap |
Membangun multimap yang kosong atau yang merupakan salinan dari semua atau sebagian dari beberapa lainnya multimap . |
Typedefs
Nama jenis | Deskripsi |
---|---|
allocator_type |
Jenis yang mewakili allocator kelas untuk multimap objek. |
const_iterator |
Jenis yang menyediakan iterator dua arah yang dapat membaca const elemen di multimap . |
const_pointer |
Jenis yang menyediakan penunjuk ke const elemen dalam multimap . |
const_reference |
Jenis yang menyediakan referensi ke elemen yang const disimpan dalam multimap untuk membaca dan melakukan const operasi. |
const_reverse_iterator |
Jenis yang menyediakan iterator dua arah yang dapat membaca elemen apa pun const di multimap . |
difference_type |
Jenis bilangan bulat bertanda tangan yang dapat digunakan untuk mewakili jumlah elemen multimap dalam rentang antara elemen yang diarahkan oleh iterator. |
iterator |
Jenis yang menyediakan perbedaan antara dua iterator yang merujuk ke elemen dalam yang sama multimap . |
key_compare |
Jenis yang menyediakan objek fungsi yang dapat membandingkan dua kunci pengurutan untuk menentukan urutan relatif dua elemen di multimap . |
key_type |
Jenis yang menjelaskan objek kunci pengurutan yang membentuk setiap elemen multimap . |
mapped_type |
Jenis yang mewakili jenis data yang disimpan dalam multimap . |
pointer |
Jenis yang menyediakan penunjuk ke const elemen dalam multimap . |
reference |
Jenis yang menyediakan referensi ke elemen yang disimpan dalam multimap . |
reverse_iterator |
Jenis yang menyediakan iterator dua arah yang dapat membaca atau memodifikasi elemen dalam terbalik multimap . |
size_type |
Jenis bilangan bulat yang tidak ditandatangani yang menyediakan penunjuk ke const elemen dalam multimap . |
value_type |
Jenis yang menyediakan objek fungsi yang dapat membandingkan dua elemen sebagai kunci pengurutan untuk menentukan urutan relatifnya di multimap . |
Fungsi anggota
Fungsi anggota | Deskripsi |
---|---|
begin |
Mengembalikan iterator yang menangani elemen pertama di multimap . |
cbegin |
Mengembalikan iterator yang const menangani elemen pertama di multimap . |
cend |
Mengembalikan iterator const yang membahas lokasi yang menggantikan elemen terakhir dalam multimap . |
clear |
Menghapus semua elemen dari multimap . |
contains C++20 |
Memeriksa apakah ada elemen dengan kunci yang ditentukan dalam multimap . |
count |
Mengembalikan jumlah elemen dalam kunci multimap yang cocok dengan kunci yang ditentukan parameter. |
crbegin |
Mengembalikan iterator yang const menangani elemen pertama dalam terbalik multimap . |
crend |
Mengembalikan iterator const yang membahas lokasi yang menggantikan elemen terakhir dalam terbalik multimap . |
emplace |
Menyisipkan elemen yang dibangun di tempat ke dalam multimap . |
emplace_hint |
Menyisipkan elemen yang dibangun di tempat ke dalam multimap , dengan petunjuk penempatan |
empty |
Menguji apakah kosong multimap . |
end |
Mengembalikan iterator yang membahas lokasi yang menggantikan elemen terakhir dalam multimap . |
equal_range |
Menemukan rentang elemen di mana kunci elemen cocok dengan nilai yang ditentukan. |
erase |
Menghapus elemen atau rentang elemen dalam multimap dari posisi tertentu atau menghapus elemen yang cocok dengan kunci tertentu. |
find |
Mengembalikan iterator yang membahas lokasi pertama elemen dalam multimap yang memiliki kunci yang setara dengan kunci tertentu. |
get_allocator |
Mengembalikan salinan objek yang allocator digunakan untuk membuat multimap . |
insert |
Menyisipkan elemen atau rentang elemen ke dalam multimap . |
key_comp |
Mengambil salinan objek perbandingan yang digunakan untuk mengurutkan kunci dalam multimap . |
lower_bound |
Mengembalikan iterator ke elemen pertama dalam multimap yang dengan kunci yang sama dengan atau lebih besar dari kunci yang ditentukan. |
max_size |
Mengembalikan panjang multimap maksimum . |
rbegin |
Mengembalikan iterator yang menangani elemen pertama dalam terbalik multimap . |
rend |
Mengembalikan iterator yang membahas lokasi yang menggantikan elemen terakhir dalam terbalik multimap . |
size |
Mengembalikan jumlah elemen dalam multimap . |
swap |
Menukar elemen dua multimap s. |
upper_bound |
Mengembalikan iterator ke elemen pertama dalam multimap yang dengan kunci yang lebih besar dari kunci yang ditentukan. |
value_comp |
Fungsi anggota mengembalikan objek fungsi yang menentukan urutan elemen dalam dengan multimap membandingkan nilai kuncinya. |
Operator | Deskripsi |
---|---|
operator= |
Mengganti elemen multimap dengan salinan dari yang lain multimap . |
Persyaratan
Header:<map>
Ruang nama:std
Pasangan ( kunci, nilai) disimpan dalam multimap
sebagai objek jenis pair
. Kelas pasangan memerlukan header <utility>
, yang secara otomatis disertakan oleh <map>
.
multimap::allocator_type
Jenis yang mewakili kelas alokator untuk multimap
objek.
typedef Allocator allocator_type;
Contoh
Lihat contoh untuk get_allocator
contoh menggunakan allocator_type
.
multimap::begin
Mengembalikan iterator yang menangani elemen pertama di multimap
.
const_iterator begin() const;
iterator begin();
Tampilkan Nilai
Iterator dua arah yang membahas elemen pertama di multimap
atau lokasi berhasil kosong multimap
.
Contoh
// multimap_begin.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <int, int> :: iterator m1_Iter;
multimap <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 as the iterator is const
// m1_cIter = m1.begin ( );
// m1.erase ( m1_cIter );
m1_cIter = m1.begin( );
cout << "First element of m1 is now " << m1_cIter -> first << endl;
}
The first element of m1 is 0
First element of m1 is now 1
multimap::cbegin
Mengembalikan iterator const
yang membahas elemen pertama dalam rentang.
const_iterator cbegin() const;
Tampilkan Nilai
Iterator const
akses dua arah yang menunjuk pada elemen pertama 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
multimap::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.
multimap::clear
Menghapus semua elemen dari multimap
.
void clear();
Contoh
Contoh berikut menunjukkan penggunaan multimap::clear
fungsi anggota.
// multimap_clear.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap<int, int> m1;
multimap<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 multimap is initially "
<< i << "." << endl;
m1.clear();
i = m1.size();
cout << "The size of the multimap after clearing is "
<< i << "." << endl;
}
The size of the multimap is initially 2.
The size of the multimap after clearing is 0.
multimap::const_iterator
Jenis yang menyediakan iterator dua arah yang dapat membaca const
elemen di multimap
.
typedef implementation-defined const_iterator;
Keterangan
Jenis const_iterator
tidak dapat digunakan untuk mengubah nilai elemen.
yang const_iterator
ditentukan oleh multimap
titik ke objek , value_type
yang berjenis pair<const Key, Type>
. Nilai kunci tersedia melalui pasangan anggota pertama dan nilai elemen yang dipetakan tersedia melalui anggota kedua pasangan.
Untuk mendereferensikan const_iterator
cIter
menunjuk ke elemen dalam multimap
, 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 menggunakan const_iterator
.
multimap::const_pointer
Jenis yang menyediakan penunjuk ke const
elemen dalam multimap
.
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 multimap
objek.
multimap::const_reference
Jenis yang menyediakan referensi ke elemen yang const
disimpan dalam multimap
untuk membaca dan melakukan const
operasi.
typedef typename allocator_type::const_reference const_reference;
Contoh
// multimap_const_ref.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <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 the first element in the multimap 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 the first element in the multimap is "
<< Ref2 << "." << endl;
}
The key of the first element in the multimap is 1.
The data value of the first element in the multimap is 10.
multimap::const_reverse_iterator
Jenis yang menyediakan iterator dua arah yang dapat membaca elemen apa pun const
di multimap
.
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
Keterangan
Jenis const_reverse_iterator
tidak dapat memodifikasi nilai elemen dan digunakan untuk melakukan iterasi melalui secara multimap
terbalik.
yang const_reverse_iterator
ditentukan oleh multimap
titik ke objek , value_type
yang berjenis pair<const Key, Type>
. Nilai kunci tersedia melalui pasangan anggota pertama dan nilai elemen yang dipetakan tersedia melalui anggota kedua pasangan.
Untuk mendereferensikan const_reverse_iterator
crIter
menunjuk ke elemen dalam multimap, 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
.
multimap::contains
Periksa apakah ada elemen dengan kunci yang ditentukan di multimap
.
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::multimap<int, bool> m = {{0, false}, {1, true}};
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::multimap<std::string, int, std::less<>> m2 = {{"ten", 10}, {"twenty", 20}, {"thirty", 30}};
std::cout << m2.contains("ten");
return 0;
}
true
false
true
multimap::count
Mengembalikan jumlah elemen dalam kunci multimap
yang cocok dengan kunci yang ditentukan parameter.
size_type count(const Key& key) const;
Parameter
key
Kunci elemen yang akan dicocokkan dari multimap.
Tampilkan Nilai
Jumlah elemen yang kunci pengurutannya cocok dengan kunci parameter; 0 jika multimap tidak berisi elemen dengan kunci yang cocok.
Keterangan
Fungsi anggota mengembalikan jumlah elemen dalam rentang
lower_bound(key)
, upper_bound(key)
yang memiliki nilai key
kunci .
Contoh
Contoh berikut menunjukkan penggunaan fungsi anggota multimap::count.
// multimap_count.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap<int, int> m1;
multimap<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));
// Elements don't need to have unique keys in multimap,
// so duplicates are allowed and counted
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: 2.
The number of elements in m1 with a sort key of 2 is: 2.
The number of elements in m1 with a sort key of 3 is: 0.
multimap::crbegin
Mengembalikan iterator yang const
menangani elemen pertama dalam terbalik multimap
.
const_reverse_iterator crbegin() const;
Tampilkan Nilai
Iterator const
dua arah terbalik yang membahas elemen pertama dalam terbalik multimap
atau mengatasi apa yang telah menjadi elemen terakhir dalam yang tidak terbalik multimap
.
Keterangan
crbegin
digunakan dengan terbalik multimap
seperti begin
yang digunakan dengan multimap
.
Dengan nilai crbegin
pengembalian , multimap
objek tidak dapat dimodifikasi.
crbegin
dapat digunakan untuk melakukan iterasi melalui mundur multimap
.
Contoh
// multimap_crbegin.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <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 multimap m1 is "
<< m1_crIter -> first << "." << endl;
}
The first element of the reversed multimap m1 is 3.
multimap::crend
Mengembalikan iterator const
yang membahas lokasi yang menggantikan elemen terakhir dalam terbalik multimap
.
const_reverse_iterator crend() const;
Tampilkan Nilai
Iterator const
dua arah terbalik yang membahas lokasi yang menggantikan elemen terakhir dalam terbalik multimap
(lokasi yang telah mendahului elemen pertama dalam yang tidak terbalik multimap
).
Keterangan
crend
digunakan dengan terbalik multimap
seperti multimap::end
yang digunakan dengan multimap
.
Dengan nilai crend
pengembalian , multimap
objek tidak dapat dimodifikasi.
crend
dapat digunakan untuk menguji apakah iterator terbalik telah mencapai akhir multimap
.
Nilai yang dikembalikan oleh crend
tidak boleh didereferensikan.
Contoh
// multimap_crend.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <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 multimap m1 is "
<< m1_crIter -> first << "." << endl;
}
The last element of the reversed multimap m1 is 1.
multimap::difference_type
Jenis bilangan bulat bertanda tangan yang dapat digunakan untuk mewakili jumlah elemen multimap
dalam rentang antara elemen yang diarahkan oleh iterator.
typedef typename 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 [first
, last
) 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
// multimap_diff_type.cpp
// compile with: /EHsc
#include <iostream>
#include <map>
#include <algorithm>
int main( )
{
using namespace std;
multimap <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 ) );
// The following will insert as multimap keys are not unique
m1.insert ( Int_Pair ( 2, 30 ) );
multimap <int, int>::iterator m1_Iter, m1_bIter, m1_eIter;
m1_bIter = m1.begin( );
m1_eIter = m1.end( );
// Count the number of elements in a multimap
multimap <int, int>::difference_type df_count = 0;
m1_Iter = m1.begin( );
while ( m1_Iter != m1_eIter )
{
df_count++;
m1_Iter++;
}
cout << "The number of elements in the multimap m1 is: "
<< df_count << "." << endl;
}
The number of elements in the multimap m1 is: 4.
multimap::emplace
Menyisipkan elemen yang dibangun di tempat (tidak ada operasi salin atau pemindahan yang dilakukan).
template <class... Args>
iterator emplace(Args&&... args);
Parameter
args
Argumen yang diteruskan untuk membangun elemen yang akan dimasukkan ke multimap
dalam .
Tampilkan Nilai
Iterator ke elemen yang baru disisipkan.
Keterangan
Tidak ada referensi ke elemen kontainer yang tidak valid oleh fungsi ini, tetapi dapat membatalkan semua iterator ke kontainer.
Jika pengecualian dilemparkan selama penyisipan, kontainer dibiarkan tidak diubah dan pengecualian ditumbuhi kembali.
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
// multimap_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()
{
multimap<string, string> m1;
m1.emplace("Anna", "Accounting");
m1.emplace("Bob", "Accounting");
m1.emplace("Carmine", "Engineering");
cout << "multimap modified, now contains ";
print(m1);
cout << endl;
m1.emplace("Bob", "Engineering");
cout << "multimap modified, now contains ";
print(m1);
cout << endl;
}
multimap::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 membangun elemen yang akan dimasukkan ke multimap
dalam .
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.)
Tampilkan Nilai
Iterator ke elemen yang baru disisipkan.
Keterangan
Tidak ada referensi ke elemen kontainer yang tidak valid oleh fungsi ini, tetapi dapat membatalkan semua iterator ke kontainer.
Selama perpindahan, 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.
Untuk contoh kode, lihat map::emplace_hint
.
multimap::empty
Menguji apakah kosong multimap
.
bool empty() const;
Tampilkan Nilai
true
multimap
jika kosong; false
jika multimap
tidak ada.
Contoh
// multimap_empty.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1, m2;
typedef pair <int, int> Int_Pair;
m1.insert ( Int_Pair ( 1, 1 ) );
if ( m1.empty( ) )
cout << "The multimap m1 is empty." << endl;
else
cout << "The multimap m1 is not empty." << endl;
if ( m2.empty( ) )
cout << "The multimap m2 is empty." << endl;
else
cout << "The multimap m2 is not empty." << endl;
}
The multimap m1 is not empty.
The multimap m2 is empty.
multimap::end
Mengembalikan iterator past-the-end.
const_iterator end() const;
iterator end();
Tampilkan Nilai
Iterator past-the-end. multimap
Jika kosong, maka multimap::end() == multimap::begin()
.
Keterangan
end
digunakan untuk menguji apakah iterator telah melewati akhir .multimap
Nilai yang dikembalikan oleh end
tidak boleh didereferensikan.
Untuk contoh kode, lihat multimap::find
.
multimap::equal_range
Menemukan rentang elemen di mana kunci elemen cocok dengan nilai yang ditentukan.
pair <const_iterator, const_iterator> equal_range (const Key& key) const;
pair <iterator, iterator> equal_range (const Key& key);
Parameter
key
Kunci argumen yang akan dibandingkan dengan kunci pengurutan elemen dari yang multimap
sedang dicari.
Tampilkan Nilai
Sepasang iterator sehingga yang pertama adalah lower_bound
kunci dan yang kedua adalah upper_bound
kunci.
Untuk mengakses iterator pertama pasangan pr
yang dikembalikan oleh fungsi anggota, gunakan pr.first
dan untuk mendereferensikan iterator batas bawah, gunakan *(pr.first)
. Untuk mengakses iterator kedua pasangan pr
yang dikembalikan oleh fungsi anggota, gunakan pr.second
dan untuk mendereferensikan iterator batas atas, gunakan *(pr.second)
.
Contoh
// multimap_equal_range.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
typedef multimap <int, int, less<int> > IntMMap;
IntMMap m1;
multimap <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 <IntMMap::const_iterator, IntMMap::const_iterator> p1, p2;
p1 = m1.equal_range( 2 );
cout << "The lower bound of the element with "
<< "a key of 2 in the multimap m1 is: "
<< p1.first -> second << "." << endl;
cout << "The upper bound of the element with "
<< "a key of 2 in the multimap 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 multimap m1 doesn't have an element "
<< "with a key less than 4." << endl;
else
cout << "The element of multimap m1 with a key >= 40 is: "
<< p1.first -> first << "." << endl;
}
The lower bound of the element with a key of 2 in the multimap m1 is: 20.
The upper bound of the element with a key of 2 in the multimap 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 multimap m1 doesn't have an element with a key less than 4.
multimap::erase
Menghapus elemen atau rentang elemen dalam multimap
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
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 multimap
.
Keterangan
Untuk contoh kode, lihat map::erase
.
multimap::find
Mengembalikan iterator yang merujuk ke lokasi pertama elemen dalam multimap
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 yang multimap
sedang dicari.
Tampilkan Nilai
Iterator yang mengacu pada lokasi elemen dengan kunci yang ditentukan, atau lokasi berhasil elemen terakhir di multimap
(multimap::end()
) jika tidak ada kecocokan yang ditemukan untuk kunci.
Keterangan
Fungsi anggota mengembalikan iterator yang mengacu pada elemen dalam multimap
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
, multimap
objek tidak dapat dimodifikasi. Jika nilai find
pengembalian ditetapkan ke iterator
, multimap
objek 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()
{
multimap<int, string> m1({ { 40, "Zr" }, { 45, "Rh" } });
cout << "The starting multimap 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 multimap m1 is (key, value):" << endl;
print_collection(m1);
cout << endl;
findit(m1, 45);
findit(m1, 6);
}
multimap::get_allocator
Mengembalikan salinan objek alokator yang digunakan untuk membuat multimap
.
allocator_type get_allocator() const;
Tampilkan Nilai
Alokator yang digunakan oleh multimap
.
Keterangan
Alokator untuk multimap
kelas 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
// multimap_get_allocator.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int>::allocator_type m1_Alloc;
multimap <int, int>::allocator_type m2_Alloc;
multimap <int, double>::allocator_type m3_Alloc;
multimap <int, int>::allocator_type m4_Alloc;
// The following lines declare objects
// that use the default allocator.
multimap <int, int> m1;
multimap <int, int, allocator<int> > m2;
multimap <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"
<< endl << "before free memory is exhausted: "
<< m2.max_size( ) << ".\n" << endl;
cout << "The number of doubles that can be allocated"
<< endl << "before free memory is exhausted: "
<< m3.max_size( ) << ".\n" << endl;
// The following line creates a multimap m4
// with the allocator of multimap 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 via the other
if( m1_Alloc == m4_Alloc )
{
cout << "The allocators are interchangeable."
<< endl;
}
else
{
cout << "The allocators are not interchangeable."
<< endl;
}
}
multimap::insert
Menyisipkan elemen atau rentang elemen ke dalam multimap
.
// (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 yang akan dimasukkan ke multimap
dalam .
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
Fungsi anggota sisipan elemen tunggal, (1) dan (2), mengembalikan iterator ke posisi di mana elemen baru dimasukkan ke dalam multimap
.
Fungsi anggota elemen-dengan-petunjuk tunggal, (3) dan (4), mengembalikan iterator yang menunjuk ke posisi di mana elemen baru dimasukkan ke dalam multimap
.
Keterangan
Tidak ada penunjuk atau referensi yang tidak valid oleh fungsi ini, tetapi dapat membatalkan semua iterator ke kontainer.
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.
Dari value_type
kontainer adalah typedef milik kontainer, dan untuk peta, multimap<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 multimap
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());
menyisipkan semua elemen v
ke dalam m
.
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 multimap::emplace
dan multimap::emplace_hint
.
Contoh
// multimap_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
multimap<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
m1.insert(make_pair(1, 111));
cout << "The modified key and mapped values of m1 are:" << endl;
print(m1);
// 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
multimap<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
multimap<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;
multimap<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;
}
multimap::iterator
Jenis yang menyediakan iterator dua arah yang dapat membaca atau memodifikasi elemen apa pun dalam multimap
.
typedef implementation-defined iterator;
Keterangan
yang iterator
ditentukan oleh multimap
titik ke objek , value_type
yang berjenis pair<const Key, Type>
. Nilai kunci tersedia melalui pasangan anggota pertama dan nilai elemen yang dipetakan tersedia melalui anggota kedua pasangan.
Untuk mendereferensikan iterator
Iter
yang menunjuk ke elemen dalam multimap
, 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
.
Jenis iterator
dapat digunakan untuk mengubah nilai elemen.
Contoh
Lihat contoh untuk begin
contoh cara mendeklarasikan dan menggunakan iterator
.
multimap::key_comp
Mengambil salinan objek perbandingan yang digunakan untuk mengurutkan kunci dalam multimap
.
key_compare key_comp() const;
Tampilkan Nilai
Mengembalikan objek fungsi yang multimap
digunakan untuk mengurutkan elemennya.
Keterangan
Objek tersimpan menentukan fungsi anggota
bool operator( const Key& x, const Key& y);
yang mengembalikan true jika x
benar-benar mendahului y
dalam urutan pengurutan.
Contoh
// multimap_key_comp.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int, less<int> > m1;
multimap <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;
}
multimap <int, int, greater<int> > m2;
multimap <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.
multimap::key_compare
Jenis yang menyediakan objek fungsi yang dapat membandingkan dua kunci pengurutan untuk menentukan urutan relatif dua elemen di multimap
.
typedef Traits key_compare;
Keterangan
key_compare
adalah sinonim untuk parameter Traits
templat .
Untuk informasi selengkapnya tentang Traits
, lihat multimap
topik Kelas .
Contoh
Lihat contoh untuk key_comp
contoh cara mendeklarasikan dan menggunakan key_compare
.
multimap::key_type
Jenis yang menjelaskan objek kunci pengurutan yang merupakan setiap elemen dari multimap
.
typedef Key key_type;
Keterangan
key_type
adalah sinonim untuk parameter Key
templat .
Untuk informasi selengkapnya tentang Key
, lihat bagian Keterangan dari multimap
topik Kelas .
Contoh
Lihat contoh untuk value_type
contoh cara mendeklarasikan dan menggunakan key_type
.
multimap::lower_bound
Mengembalikan iterator ke elemen pertama dalam multimap
yang dengan 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
Kunci argumen yang akan dibandingkan dengan kunci pengurutan elemen dari yang multimap
sedang dicari.
Tampilkan Nilai
Iterator atau const_iterator
yang membahas lokasi elemen dalam multimap
yang dengan kunci yang sama dengan atau lebih besar dari kunci argumen, atau yang membahas lokasi yang menggantikan elemen terakhir dalam multimap
jika tidak ada kecocokan yang ditemukan untuk kunci.
Jika nilai lower_bound
pengembalian ditetapkan ke const_iterator
, multimap
objek tidak dapat dimodifikasi. Jika nilai lower_bound
pengembalian ditetapkan ke iterator, multimap
objek dapat dimodifikasi.
Contoh
// multimap_lower_bound.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <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, 20 ) );
m1.insert ( Int_Pair ( 3, 30 ) );
m1_RcIter = m1.lower_bound( 2 );
cout << "The element of multimap m1 with a key of 2 is: "
<< m1_RcIter -> second << "." << endl;
m1_RcIter = m1.lower_bound( 3 );
cout << "The first element of multimap m1 with a key of 3 is: "
<< m1_RcIter -> second << "." << endl;
// If no match is found for the key, end( ) is returned
m1_RcIter = m1.lower_bound( 4 );
if ( m1_RcIter == m1.end( ) )
cout << "The multimap m1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of multimap m1 with a key of 4 is: "
<< m1_RcIter -> second << "." << endl;
// The element at a specific location in the multimap 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 first element of m1 with a key matching\n"
<< "that of the last element is: "
<< m1_RcIter -> second << "." << endl;
// Note that the first element with a key equal to
// the key of the last element is not the last element
if ( m1_RcIter == --m1.end( ) )
cout << "This is the last element of multimap m1."
<< endl;
else
cout << "This is not the last element of multimap m1."
<< endl;
}
The element of multimap m1 with a key of 2 is: 20.
The first element of multimap m1 with a key of 3 is: 20.
The multimap m1 doesn't have an element with a key of 4.
The first element of m1 with a key matching
that of the last element is: 20.
This is not the last element of multimap m1.
multimap::mapped_type
Jenis yang mewakili jenis data yang disimpan dalam multimap
.
typedef Type mapped_type;
Keterangan
mapped_type
adalah sinonim untuk parameter Type
templat .
Untuk informasi selengkapnya tentang Type
, lihat multimap
topik Kelas .
Contoh
Lihat contoh untuk value_type
contoh cara mendeklarasikan dan menggunakan key_type
.
multimap::max_size
Mengembalikan panjang multimap
maksimum .
size_type max_size() const;
Tampilkan Nilai
Panjang maksimum yang mungkin dari multimap
.
Contoh
// multimap_max_size.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <int, int> :: size_type i;
i = m1.max_size( );
cout << "The maximum possible length "
<< "of the multimap is " << i << "." << endl;
}
multimap::multimap
Membangun multimap
yang kosong atau yang merupakan salinan dari semua atau sebagian dari beberapa lainnya multimap
.
multimap();
explicit multimap(
const Traits& Comp);
multimap(
const Traits& Comp,
const Allocator& Al);
map(
const multimap& Right);
multimap(
multimap&& Right);
multimap(
initializer_list<value_type> IList);
multimap(
initializer_list<value_type> IList,
const Compare& Comp);
multimap(
initializer_list<value_type> IList,
const Compare& Comp,
const Allocator& Al);
template <class InputIterator>
multimap(
InputIterator First,
InputIterator Last);
template <class InputIterator>
multimap(
InputIterator First,
InputIterator Last,
const Traits& Comp);
template <class InputIterator>
multimap(
InputIterator First,
InputIterator Last,
const Traits& Comp,
const Allocator& Al);
Parameter
Al
Kelas alokator penyimpanan yang akan digunakan untuk objek multimap ini, yang default ke Alokator.
Comp
Fungsi perbandingan jenis constTraits
yang digunakan untuk mengurutkan elemen dalam peta, yang default ke Traits
.
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 untuk menyalin elemen.
Keterangan
Semua konstruktor menyimpan jenis objek alokator yang mengelola penyimpanan memori untuk multimap
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 multimap
.
Semua konstruktor menyimpan objek fungsi jenis Traits
yang digunakan untuk membuat pesanan multimap
di antara kunci dan yang nantinya dapat dikembalikan dengan memanggil key_comp
.
Tiga konstruktor pertama menentukan awal multimap
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 multimap
Right
.
Konstruktor kelima menentukan salinan multimap
dengan memindahkan Kanan.
Konstruktor ke-6, ke-7, dan ke-8 menyalin anggota initializer_list
.
Tiga konstruktor berikutnya menyalin rentang [First, Last)
peta dengan meningkatkan eksplisititas dalam menentukan jenis fungsi perbandingan kelas Traits
dan alokator.
Contoh
// multimap_ctor.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main()
{
using namespace std;
typedef pair <int, int> Int_Pair;
// Create an empty multimap m0 of key type integer
multimap <int, int> m0;
// Create an empty multimap m1 with the key comparison
// function of less than, then insert 4 elements
multimap <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 multimap m2 with the key comparison
// function of greater than, then insert 2 elements
multimap <int, int, less<int> > m2;
m2.insert(Int_Pair(1, 10));
m2.insert(Int_Pair(2, 20));
// Create a multimap m3 with the
// allocator of multimap m1
multimap <int, int>::allocator_type m1_Alloc;
m1_Alloc = m1.get_allocator();
multimap <int, int> m3(less<int>(), m1_Alloc);
m3.insert(Int_Pair(3, 30));
// Create a copy, multimap m4, of multimap m1
multimap <int, int> m4(m1);
// Create a multimap m5 by copying the range m1[ first, last)
multimap <int, int>::const_iterator m1_bcIter, m1_ecIter;
m1_bcIter = m1.begin();
m1_ecIter = m1.begin();
m1_ecIter++;
m1_ecIter++;
multimap <int, int> m5(m1_bcIter, m1_ecIter);
// Create a multimap m6 by copying the range m4[ first, last)
// and with the allocator of multimap m2
multimap <int, int>::allocator_type m2_Alloc;
m2_Alloc = m2.get_allocator();
multimap <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 multimap m8 by copying in an initializer_list
multimap<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 multimap m9 with an initializer_list and a comparator
multimap<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 multimap m10 with an initializer_list, a comparator, and an allocator
multimap<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;
}
multimap::operator=
Mengganti elemen multimap
dengan salinan dari yang lain multimap
.
multimap& operator=(const multimap& right);
multimap& operator=(multimap&& right);
Parameter
right
yang multimap
sedang disalin ke multimap
dalam .
Keterangan
Setelah menghapus elemen yang ada dalam multimap
, operator=
salin atau pindahkan konten right
ke multimap
dalam .
Contoh
// multimap_operator_as.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap<int, int> v1, v2, v3;
multimap<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;
}
multimap::pointer
Jenis yang menyediakan penunjuk ke elemen dalam multimap
.
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 multimap
objek.
multimap::rbegin
Mengembalikan iterator yang menangani elemen pertama dalam terbalik multimap
.
const_reverse_iterator rbegin() const;
reverse_iterator rbegin();
Tampilkan Nilai
Iterator dua arah terbalik yang membahas elemen pertama dalam terbalik multimap
atau mengatasi apa yang telah menjadi elemen terakhir dalam yang tidak terbalik multimap
.
Keterangan
rbegin
digunakan dengan terbalik multimap
seperti begin
yang digunakan dengan multimap
.
Jika nilai rbegin
pengembalian ditetapkan ke const_reverse_iterator
, maka multimap
objek tidak dapat dimodifikasi. Jika nilai rbegin
pengembalian ditetapkan ke reverse_iterator
, maka multimap
objek dapat dimodifikasi.
rbegin
dapat digunakan untuk melakukan iterasi melalui mundur multimap
.
Contoh
// multimap_rbegin.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <int, int> :: iterator m1_Iter;
multimap <int, int> :: reverse_iterator m1_rIter;
multimap <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 multimap m1 is "
<< m1_rIter -> first << "." << endl;
// begin can be used to start an iteration
// through a multimap in a forward order
cout << "The multimap 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 multimap in a reverse order
cout << "The reversed multimap is: ";
for ( m1_rIter = m1.rbegin( ) ; m1_rIter != m1.rend( ); m1_rIter++)
cout << m1_rIter -> first << " ";
cout << "." << endl;
// A multimap element can be erased by dereferencing 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 multimap is "
<< m1_rIter -> first << "." << endl;
}
The first element of the reversed multimap m1 is 3.
The multimap is: 1 2 3 .
The reversed multimap is: 3 2 1 .
After the erasure, the first element in the reversed multimap is 2.
multimap::reference
Jenis yang menyediakan referensi ke elemen yang disimpan dalam multimap
.
typedef typename allocator_type::reference reference;
Contoh
// multimap_ref.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <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 multimap 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 multimap 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 multimap is 1.
The data value of first element in the multimap is 10.
The modified data value of first element is 15.
multimap::rend
Mengembalikan iterator yang membahas lokasi yang menggantikan elemen terakhir dalam terbalik multimap
.
const_reverse_iterator rend() const;
reverse_iterator rend();
Tampilkan Nilai
Iterator dua arah terbalik yang membahas lokasi yang menggantikan elemen terakhir dalam terbalik multimap
(lokasi yang telah mendahului elemen pertama dalam yang tidak terbalik multimap
).
Keterangan
rend
digunakan dengan terbalik multimap
seperti end
yang digunakan dengan multimap
.
Jika nilai rend
pengembalian ditetapkan ke const_reverse_iterator
, maka multimap
objek tidak dapat dimodifikasi. Jika nilai rend
pengembalian ditetapkan ke reverse_iterator
, maka multimap
objek dapat dimodifikasi.
rend
dapat digunakan untuk menguji apakah iterator terbalik telah mencapai akhir multimap
.
Nilai yang dikembalikan oleh rend
tidak boleh didereferensikan.
Contoh
// multimap_rend.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <int, int> :: iterator m1_Iter;
multimap <int, int> :: reverse_iterator m1_rIter;
multimap <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 multimap m1 is "
<< m1_rIter -> first << "." << endl;
// begin can be used to start an iteration
// through a multimap in a forward order
cout << "The multimap 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 multimap in a reverse order
cout << "The reversed multimap is: ";
for ( m1_rIter = m1.rbegin( ) ; m1_rIter != m1.rend( ); m1_rIter++)
cout << m1_rIter -> first << " ";
cout << "." << endl;
// A multimap 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 multimap is "
<< m1_rIter -> first << "." << endl;
}
The last element of the reversed multimap m1 is 1.
The multimap is: 1 2 3 .
The reversed multimap is: 3 2 1 .
After the erasure, the last element in the reversed multimap is 2.
multimap::reverse_iterator
Jenis yang menyediakan iterator dua arah yang dapat membaca atau memodifikasi elemen dalam terbalik multimap
.
typedef std::reverse_iterator<iterator> reverse_iterator;
Keterangan
Jenis reverse_iterator
digunakan untuk melakukan iterasi melalui secara multimap
terbalik.
yang reverse_iterator
ditentukan oleh multimap
titik ke objek , value_type
yang berjenis pair<const Key, Type>
. Nilai kunci tersedia melalui pasangan anggota pertama dan nilai elemen yang dipetakan tersedia melalui anggota kedua pasangan.
Untuk mendereferensikan reverse_iterator
rIter
menunjuk ke elemen dalam multimap
, gunakan ->
operator .
Untuk mengakses nilai kunci untuk elemen , gunakan rIter->first
, yang setara dengan (*rIter).first
. Untuk mengakses nilai datum yang dipetakan untuk elemen , gunakan rIter->second
, yang setara dengan (*rIter).second
.
Contoh
Lihat contoh untuk rbegin
contoh cara mendeklarasikan dan menggunakan reverse_iterator
.
multimap::size
Mengembalikan jumlah elemen dalam multimap
.
size_type size() const;
Tampilkan Nilai
Panjang saat ini dari multimap
.
Contoh
Contoh berikut menunjukkan penggunaan multimap::size
fungsi anggota.
// multimap_size.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main()
{
using namespace std;
multimap<int, int> m1, m2;
multimap<int, int>::size_type i;
typedef pair<int, int> Int_Pair;
m1.insert(Int_Pair(1, 1));
i = m1.size();
cout << "The multimap length is " << i << "." << endl;
m1.insert(Int_Pair(2, 4));
i = m1.size();
cout << "The multimap length is now " << i << "." << endl;
}
The multimap length is 1.
The multimap length is now 2.
multimap::size_type
Jenis bilangan bulat yang tidak ditandatangani yang menghitung jumlah elemen dalam multimap
.
typedef typename allocator_type::size_type size_type;
Contoh
Lihat contoh untuk size
contoh cara mendeklarasikan dan menggunakan size_type
multimap::swap
Menukar elemen dua multimap
s.
void swap(
multimap<Key, Type, Traits, Allocator>& right);
Parameter
right
yang multimap
menyediakan elemen yang akan ditukar, atau multimap
yang elemennya akan ditukar dengan elemen multimap
left
.
Keterangan
Fungsi anggota tidak membatalkan referensi, pointer, atau iterator yang menunjuk elemen dalam dua multimap
s yang elemennya sedang ditukar.
Contoh
// multimap_swap.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1, m2, m3;
multimap <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 multimap 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
m1.swap( m2 );
cout << "After swapping with m2, multimap 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, multimap m1 is:";
for ( m1_Iter = m1.begin( ); m1_Iter != m1.end( ); m1_Iter++ )
cout << " " << m1_Iter -> second;
cout << "." << endl;
}
The original multimap m1 is: 10 20 30.
After swapping with m2, multimap m1 is: 100 200.
After swapping with m3, multimap m1 is: 300.
multimap::upper_bound
Mengembalikan iterator
ke elemen pertama dalam multimap
yang dengan kunci yang lebih besar dari kunci yang ditentukan.
iterator upper_bound(const Key& key);
const_iterator upper_bound(const Key& key) const;
Parameter
key
Kunci argumen yang akan dibandingkan dengan kunci pengurutan elemen dari yang multimap
sedang dicari.
Tampilkan Nilai
iterator
Atau const_iterator
yang membahas lokasi elemen dalam multimap
yang dengan kunci yang lebih besar dari kunci argumen, atau yang membahas lokasi yang menggantikan elemen terakhir dalam jika tidak ada kecocokan multimap
yang ditemukan untuk kunci.
Jika nilai yang dikembalikan ditetapkan ke const_iterator
, multimap
objek tidak dapat dimodifikasi. Jika nilai pengembalian ditetapkan ke iterator
, multimap
objek dapat dimodifikasi.
Contoh
// multimap_upper_bound.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int> m1;
multimap <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.insert ( Int_Pair ( 3, 40 ) );
m1_RcIter = m1.upper_bound( 1 );
cout << "The 1st element of multimap m1 with "
<< "a key greater than 1 is: "
<< m1_RcIter -> second << "." << endl;
m1_RcIter = m1.upper_bound( 2 );
cout << "The first element of multimap 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.lower_bound( 4 );
if ( m1_RcIter == m1.end( ) )
cout << "The multimap m1 doesn't have an element "
<< "with a key of 4." << endl;
else
cout << "The element of multimap m1 with a key of 4 is: "
<< m1_RcIter -> second << "." << endl;
// The element at a specific location in the multimap can be
// found using a dereferenced iterator addressing the location
m1_AcIter = m1.begin( );
m1_RcIter = m1.upper_bound( m1_AcIter -> first );
cout << "The first element of m1 with a key greater than\n"
<< "that of the initial element of m1 is: "
<< m1_RcIter -> second << "." << endl;
}
The 1st element of multimap m1 with a key greater than 1 is: 20.
The first element of multimap m1 with a key greater than 2 is: 30.
The multimap m1 doesn't have an element with a key of 4.
The first element of m1 with a key greater than
that of the initial element of m1 is: 20.
multimap::value_comp
Fungsi anggota mengembalikan objek fungsi yang menentukan urutan elemen dalam dengan multimap
membandingkan nilai kuncinya.
value_compare value_comp() const;
Tampilkan Nilai
Mengembalikan objek fungsi perbandingan yang multimap
digunakan untuk mengurutkan elemennya.
Keterangan
multimap
m
Untuk , jika dua elemen e1(k1, d1)
dan e2(k2, d2)
merupakan objek jenis value_type
, di mana k1
dan k2
merupakan kunci jenisnya key_type
dan d1
dan d2
merupakan data jenisnya mapped_type
, maka m.value_comp(e1, e2)
setara dengan m.key_comp(k1, k2)
.
Contoh
// multimap_value_comp.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
multimap <int, int, less<int> > m1;
multimap <int, int, less<int> >::value_compare vc1 = m1.value_comp( );
multimap<int,int>::iterator Iter1, Iter2;
Iter1= m1.insert ( multimap <int, int> :: value_type ( 1, 10 ) );
Iter2= m1.insert ( multimap <int, int> :: value_type ( 2, 5 ) );
if( vc1( *Iter1, *Iter2 ) == 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( *Iter2, *Iter1 ) == 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 ).
multimap::value_type
Jenis yang mewakili jenis objek yang disimpan sebagai elemen dalam peta.
typedef pair<const Key, Type> value_type;
Contoh
// multimap_value_type.cpp
// compile with: /EHsc
#include <map>
#include <iostream>
int main( )
{
using namespace std;
typedef pair <const int, int> cInt2Int;
multimap <int, int> m1;
multimap <int, int> :: key_type key1;
multimap <int, int> :: mapped_type mapped1;
multimap <int, int> :: value_type value1;
multimap <int, int> :: iterator pIter;
// value_type can be used to pass the correct type
// explicitly to avoid implicit type conversion
m1.insert ( multimap <int, int> :: value_type ( 1, 10 ) );
// Compare another way to insert objects into a hash_multimap
m1.insert ( cInt2Int ( 2, 20 ) );
// Initializing key1 and mapped1
key1 = ( m1.begin( ) -> first );
mapped1 = ( m1.begin( ) -> second );
cout << "The key of first element in the multimap is "
<< key1 << "." << endl;
cout << "The data value of first element in the multimap is "
<< mapped1 << "." << endl;
// The following line would cause an error because
// the value_type is not 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;
}
The key of first element in the multimap is 1.
The data value of first element in the multimap is 10.
The keys of the mapped elements are: 1 2.
The values of the mapped elements are: 10 20.
Baca juga
Kontainer
Keamanan utas di Pustaka Standar C++
Referensi pustaka standar C++
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk