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_companggota . 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.
containsC++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 multimapmaksimum .
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 multimaps.
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 cbeginpengembalian , 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_typeyang 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_iteratorcIter 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_typeyang 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_iteratorcrIter 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 keykunci .

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 crbeginpengembalian , 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 crendpengembalian , 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 multimapdalam .

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 multimapdalam .

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

truemultimap 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

enddigunakan 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 multimapdalam .

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_typeyang berjenis pair<const Key, Type>. Nilai kunci tersedia melalui pasangan anggota pertama dan nilai elemen yang dipetakan tersedia melalui anggota kedua pasangan.

Untuk mendereferensikan iteratorIter 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 Traitstemplat .

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 Keytemplat .

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 Typetemplat .

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 multimapmaksimum .

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 multimapkosong , 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 multimapRight.

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 multimapdalam .

Keterangan

Setelah menghapus elemen yang ada dalam multimap, operator= salin atau pindahkan konten right ke multimapdalam .

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_typeyang 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_iteratorrIter 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 multimaps.

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 multimapleft.

Keterangan

Fungsi anggota tidak membatalkan referensi, pointer, atau iterator yang menunjuk elemen dalam dua multimaps 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

multimapmUntuk , 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++