Bagikan melalui


set Kelas

Kelas kontainer set Pustaka Standar C++ digunakan untuk menyimpan dan mengambil data dari koleksi. Nilai elemen dalam set adalah unik dan berfungsi sebagai nilai kunci yang sesuai dengan urutan data secara otomatis. Nilai elemen dalam set mungkin tidak diubah secara langsung. Sebagai gantinya, Anda harus menghapus nilai lama dan menyisipkan elemen dengan nilai baru.

Sintaks

template <class Key,
    class Traits=less<Key>,
    class Allocator=allocator<Key>>
class set

Parameter

Key
Jenis data elemen yang akan disimpan dalam set.

Traits
Jenis yang menyediakan objek fungsi yang dapat membandingkan dua nilai elemen sebagai kunci pengurutan untuk menentukan urutan relatifnya dalam set. Argumen ini bersifat opsional, dan 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. Lihat Pencarian Heterogen di Kontainer Asosiatif untuk informasi selengkapnya.

Allocator
Jenis yang mewakili objek alokator tersimpan yang merangkum detail tentang alokasi set dan alokasi memori. Argumen ini bersifat opsional, dan nilai defaultnya adalah allocator<Key>.

Keterangan

Kumpulan Pustaka Standar C++ adalah:

  • Kontainer asosiatif, yang merupakan kontainer ukuran variabel yang mendukung pengambilan nilai elemen yang efisien berdasarkan nilai kunci terkait. Selain itu, ini adalah kontainer asosiatif sederhana karena nilai elemennya adalah nilai kuncinya.

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

  • Unik dalam arti bahwa setiap elemennya harus memiliki kunci yang unik. Karena set juga merupakan kontainer asosiatif sederhana, elemen-elemennya juga unik.

Satu set juga digambarkan sebagai templat kelas karena fungsionalitas yang disediakannya bersifat generik dan independen dari jenis data tertentu yang terkandung sebagai elemen. Jenis data yang akan digunakan adalah, sebagai gantinya, ditentukan sebagai parameter dalam templat kelas bersama dengan fungsi perbandingan dan alokator.

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 menunjuk elemen yang dihapus.

Set harus menjadi kontainer pilihan asosiatif ketika kondisi mengaitkan nilai dengan kuncinya dipenuhi oleh aplikasi. Elemen set unik dan berfungsi sebagai kunci sortir mereka sendiri. Model untuk jenis struktur ini adalah daftar yang diurutkan dari, katakanlah, kata-kata di mana kata-kata hanya dapat terjadi sekali. Jika beberapa kemunculan kata diizinkan, maka multiset akan menjadi struktur kontainer yang sesuai. Jika nilai perlu dilampirkan ke daftar kata kunci unik, maka peta akan menjadi struktur yang sesuai untuk memuat data ini. Jika sebaliknya kunci tidak unik, maka multimap akan menjadi kontainer pilihan.

Set mengurutkan urutan 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 harus hanya kurang dari sebanding untuk menetapkan urutan ini sehingga, mengingat dua elemen, dapat ditentukan baik bahwa elemen tersebut setara (dalam arti 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 biner f(x,y) adalah objek fungsi yang memiliki dua objek argumen x dan y dan nilai true pengembalian atau false. Pemesanan yang diberlakukan pada satu set adalah urutan lemah yang ketat jika predikat biner tidak fleksibel, antisimmetris, dan transitif dan jika kesetaraan transitif, di mana dua objek x dan y didefinisikan setara ketika f x,y) dan f(y,x) salah. 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.

Iterator yang disediakan oleh kelas set adalah iterator dua arah, tetapi anggota kelas berfungsi insert dan set 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.

Konstruktor

Nama Deskripsi
set Membuat set yang kosong atau merupakan salinan dari semua atau sebagian dari beberapa set lainnya.

Typedefs

Nama Deskripsi
allocator_type Jenis yang mewakili allocator kelas untuk objek yang ditetapkan.
const_iterator Jenis yang menyediakan iterator dua arah yang dapat membaca const elemen dalam set.
const_pointer Jenis yang menyediakan penunjuk ke const elemen dalam satu set.
const_reference Jenis yang menyediakan referensi ke elemen yang const disimpan dalam satu set untuk membaca dan melakukan const operasi.
const_reverse_iterator Jenis yang menyediakan iterator dua arah yang dapat membaca elemen apa pun const dalam set.
difference_type Jenis bilangan bulat bertanda tangan yang dapat digunakan untuk mewakili jumlah elemen set dalam rentang antara elemen yang diarahkan oleh iterator.
iterator Jenis yang menyediakan iterator dua arah yang dapat membaca atau memodifikasi elemen apa pun dalam satu set.
key_compare Jenis yang menyediakan objek fungsi yang dapat membandingkan dua kunci pengurutan untuk menentukan urutan relatif dua elemen dalam set.
key_type Jenis ini menjelaskan objek yang disimpan sebagai elemen set dalam kapasitasnya sebagai kunci pengurutan.
pointer Jenis yang menyediakan penunjuk ke elemen dalam satu set.
reference Jenis yang menyediakan referensi ke elemen yang disimpan dalam satu set.
reverse_iterator Jenis yang menyediakan iterator dua arah yang dapat membaca atau memodifikasi elemen dalam set terbalik.
size_type Jenis bilangan bulat yang tidak ditandatangani yang dapat mewakili jumlah elemen dalam satu set.
value_compare Jenis yang menyediakan objek fungsi yang dapat membandingkan dua elemen untuk menentukan urutan relatifnya dalam set.
value_type Jenis ini menjelaskan objek yang disimpan sebagai elemen dari set dalam kapasitasnya sebagai nilai.

Fungsi

Nama Deskripsi
begin Mengembalikan iterator yang membahas elemen pertama di set.
cbegin Mengembalikan iterator const yang membahas elemen pertama dalam set.
cend Mengembalikan iterator const yang membahas lokasi yang menggantikan elemen terakhir dalam set.
clear Menghapus semua elemen dari set.
contains C++20 Periksa apakah ada elemen dengan kunci yang ditentukan di set.
count Mengembalikan jumlah elemen dalam kunci set yang cocok dengan kunci yang ditentukan parameter.
crbegin Mengembalikan iterator const yang menangani elemen pertama dalam reversed set.
crend Mengembalikan iterator const yang membahas lokasi yang menggantikan elemen terakhir dalam terbalik set.
emplace Menyisipkan elemen yang dibangun di tempat ke dalam set.
emplace_hint Menyisipkan elemen yang dibangun di tempat ke dalam set, dengan petunjuk penempatan.
empty Menguji apakah kosong set .
end Mengembalikan iterator yang membahas lokasi yang menggantikan elemen terakhir dalam set.
equal_range Mengembalikan sepasang iterator masing-masing ke elemen pertama dalam set dengan kunci yang lebih besar dari kunci yang ditentukan dan ke elemen pertama di set dengan kunci yang sama dengan atau lebih besar dari kunci.
erase Menghapus elemen atau rentang elemen dalam set dari posisi tertentu atau menghapus elemen yang cocok dengan kunci tertentu.
find Mengembalikan iterator yang membahas lokasi elemen dalam set yang memiliki kunci yang setara dengan kunci yang ditentukan.
get_allocator Mengembalikan salinan objek yang allocator digunakan untuk membuat set.
insert Menyisipkan elemen atau rentang elemen ke dalam set.
key_comp Mengambil salinan objek perbandingan yang digunakan untuk mengurutkan kunci dalam set.
lower_bound Mengembalikan iterator ke elemen pertama dalam satu set dengan kunci yang sama dengan atau lebih besar dari kunci yang ditentukan.
max_size Mengembalikan panjang setmaksimum .
rbegin Mengembalikan iterator yang menangani elemen pertama dalam terbalik set.
rend Mengembalikan iterator yang membahas lokasi yang menggantikan elemen terakhir dalam terbalik set.
size Mengembalikan jumlah elemen dalam set.
swap Menukar elemen dua sets.
upper_bound Mengembalikan iterator ke elemen pertama dalam set dengan kunci yang lebih besar dari kunci yang ditentukan.
value_comp Mengambil salinan objek perbandingan yang digunakan untuk mengurutkan nilai elemen dalam set.

Operator

Nama Deskripsi
operator= Mengganti elemen set dengan salinan set lain.

allocator_type

Jenis yang mewakili kelas alokator untuk objek yang ditetapkan.

typedef Allocator allocator_type;

Keterangan

allocator_type adalah sinonim untuk parameter Allocatortemplat .

Mengembalikan objek fungsi yang digunakan multiset untuk mengurutkan elemennya, yang merupakan parameter Allocatortemplat .

Untuk informasi selengkapnya tentang Allocator, lihat bagian Keterangan dari set topik Kelas .

Contoh

Lihat contoh untuk get_allocator contoh yang menggunakan allocator_type.

begin

Mengembalikan iterator yang membahas elemen pertama dalam set.

const_iterator begin() const;

iterator begin();

Tampilkan Nilai

Iterator dua arah yang menangani elemen pertama di set atau lokasi berhasil set kosong.

Keterangan

Jika nilai begin pengembalian ditetapkan ke const_iterator, elemen dalam objek yang ditetapkan tidak dapat dimodifikasi. Jika nilai begin pengembalian ditetapkan ke iterator, elemen dalam objek yang ditetapkan dapat dimodifikasi.

Contoh

// set_begin.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int> s1;
   set <int>::iterator s1_Iter;
   set <int>::const_iterator s1_cIter;

   s1.insert( 1 );
   s1.insert( 2 );
   s1.insert( 3 );

   s1_Iter = s1.begin( );
   cout << "The first element of s1 is " << *s1_Iter << endl;

   s1_Iter = s1.begin( );
   s1.erase( s1_Iter );

   // The following 2 lines would err because the iterator is const
   // s1_cIter = s1.begin( );
   // s1.erase( s1_cIter );

   s1_cIter = s1.begin( );
   cout << "The first element of s1 is now " << *s1_cIter << endl;
}
The first element of s1 is 1
The first element of s1 is now 2

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

cend

Mengembalikan iterator const yang membahas lokasi tepat di luar elemen terakhir dalam rentang.

const_iterator cend() const;

Tampilkan Nilai

Iterator const akses dua arah yang menunjuk tepat di luar akhir rentang.

Keterangan

cend digunakan untuk menguji apakah iterator telah melewati akhir rentangnya.

Anda dapat menggunakan fungsi anggota ini sebagai pengganti end() fungsi anggota untuk menjamin bahwa nilai yang dikembalikan adalah const_iterator. Biasanya, ini digunakan bersama dengan auto kata kunci pengurangan jenis, seperti yang ditunjukkan dalam contoh berikut. Dalam contoh, pertimbangkan Container untuk menjadi kontainer yang dapat dimodifikasi (non- const) dari segala jenis yang mendukung end() dan cend().

auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();

// i2 is Container<T>::const_iterator

Nilai yang dikembalikan oleh cend tidak boleh didereferensikan.

clear

Menghapus semua elemen set.

void clear();

Contoh

// set_clear.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int> s1;

   s1.insert( 1 );
   s1.insert( 2 );

   cout << "The size of the set is initially " << s1.size( )
        << "." << endl;

   s1.clear( );
   cout << "The size of the set after clearing is "
        << s1.size( ) << "." << endl;
}
The size of the set is initially 2.
The size of the set after clearing is 0.

const_iterator

Jenis yang menyediakan iterator dua arah yang dapat membaca const elemen dalam set.

typedef implementation-defined const_iterator;

Keterangan

Jenis const_iterator tidak dapat digunakan untuk mengubah nilai elemen.

Contoh

Lihat contoh untuk begin contoh yang menggunakan const_iterator.

const_pointer

Jenis yang menyediakan penunjuk ke const elemen dalam satu set.

typedef typename allocator_type::const_pointer const_pointer;

Keterangan

Jenis const_pointer tidak dapat digunakan untuk mengubah nilai elemen.

Dalam kebanyakan kasus, const_iterator harus digunakan untuk mengakses elemen dalam objek set const.

const_reference

Jenis yang menyediakan referensi ke elemen yang const disimpan dalam satu set untuk membaca dan melakukan const operasi.

typedef typename allocator_type::const_reference const_reference;

Contoh

// set_const_ref.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int> s1;

   s1.insert( 10 );
   s1.insert( 20 );

   // Declare and initialize a const_reference &Ref1
   // to the 1st element
   const int &Ref1 = *s1.begin( );

   cout << "The first element in the set is "
        << Ref1 << "." << endl;

   // The following line would cause an error because the
   // const_reference can't be used to modify the set
   // Ref1 = Ref1 + 5;
}
The first element in the set is 10.

const_reverse_iterator

Jenis yang menyediakan iterator dua arah yang dapat membaca elemen apa pun const dalam set.

typedef std::reverse_iterator<const_iterator> const_reverse_iterator;

Keterangan

Jenis const_reverse_iterator tidak dapat mengubah nilai elemen dan digunakan untuk melakukan iterasi melalui set secara terbalik.

Contoh

Lihat contoh untuk rend contoh cara mendeklarasikan dan menggunakan const_reverse_iterator.

contains

Periksa apakah ada elemen dengan kunci yang ditentukan di set.

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 di set; false jika tidak.

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 <set>
#include <iostream>

int main()
{
    std::set<int> theSet = {1, 2};

    std::cout << std::boolalpha; // so booleans show as 'true' or 'false'
    std::cout << theSet.contains(2) << '\n';
    std::cout << theSet.contains(3) << '\n';

    return 0;
}
true
false

count

Mengembalikan jumlah elemen dalam satu set yang kuncinya cocok dengan kunci yang ditentukan parameter.

size_type count(const Key& key) const;

Parameter

key
Kunci elemen yang akan dicocokkan dari set.

Tampilkan Nilai

1 jika set berisi elemen yang kunci pengurutannya cocok dengan kunci parameter. 0 jika set tidak berisi elemen dengan kunci yang cocok.

Keterangan

Fungsi anggota mengembalikan jumlah elemen dalam rentang berikut:

[lower_bound(key), upper_bound(key) ).

Contoh

Contoh berikut menunjukkan penggunaan set::count fungsi anggota.

// set_count.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main()
{
    using namespace std;
    set<int> s1;
    set<int>::size_type i;

    s1.insert(1);
    s1.insert(1);

    // Keys must be unique in set, so duplicates are ignored
    i = s1.count(1);
    cout << "The number of elements in s1 with a sort key of 1 is: "
         << i << "." << endl;

    i = s1.count(2);
    cout << "The number of elements in s1 with a sort key of 2 is: "
         << i << "." << endl;
}
The number of elements in s1 with a sort key of 1 is: 1.
The number of elements in s1 with a sort key of 2 is: 0.

crbegin

Mengembalikan iterator const yang menangani elemen pertama dalam set terbalik.

const_reverse_iterator crbegin() const;

Tampilkan Nilai

Iterator dua arah terbalik const yang membahas elemen pertama dalam set terbalik atau mengatasi apa yang telah menjadi elemen terakhir dalam set yang tidak terbalik.

Keterangan

crbegin digunakan dengan set terbalik sama seperti begin yang digunakan dengan satu set.

Dengan nilai crbeginpengembalian , objek yang ditetapkan tidak dapat dimodifikasi.

Contoh

// set_crbegin.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int> s1;
   set <int>::const_reverse_iterator s1_crIter;

   s1.insert( 10 );
   s1.insert( 20 );
   s1.insert( 30 );

   s1_crIter = s1.crbegin( );
   cout << "The first element in the reversed set is "
        << *s1_crIter << "." << endl;
}
The first element in the reversed set is 30.

crend

Mengembalikan iterator const yang membahas lokasi yang menggantikan elemen terakhir dalam set terbalik.

const_reverse_iterator crend() const;

Tampilkan Nilai

Iterator dua arah terbalik const yang membahas lokasi yang menggantikan elemen terakhir dalam set terbalik (lokasi yang telah mendahului elemen pertama dalam set yang tidak terbalik).

Keterangan

crend digunakan dengan set terbalik sama seperti end yang digunakan dengan satu set.

Dengan nilai crendpengembalian , objek yang ditetapkan tidak dapat dimodifikasi. Nilai yang dikembalikan oleh crend tidak boleh didereferensikan.

crend dapat digunakan untuk menguji apakah iterator terbalik telah mencapai akhir kumpulannya.

Contoh

// set_crend.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main() {
   using namespace std;
   set <int> s1;
   set <int>::const_reverse_iterator s1_crIter;

   s1.insert( 10 );
   s1.insert( 20 );
   s1.insert( 30 );

   s1_crIter = s1.crend( );
   s1_crIter--;
   cout << "The last element in the reversed set is "
        << *s1_crIter << "." << endl;
}

difference_type

Jenis bilangan bulat bertanda tangan yang dapat digunakan untuk mewakili jumlah elemen set 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 [ pertama, terakhir) antara iterator first dan last, termasuk elemen yang diarahkan oleh first dan rentang elemen hingga, tetapi tidak termasuk, elemen yang ditunjukkan oleh last.

Meskipun difference_type tersedia untuk semua iterator yang memenuhi persyaratan iterator input, yang mencakup kelas iterator dua arah yang didukung oleh kontainer yang dapat dibalik seperti set, pengurangan antara iterator hanya didukung oleh iterator akses acak yang disediakan oleh kontainer akses acak seperti vektor.

Contoh

// set_diff_type.cpp
// compile with: /EHsc
#include <iostream>
#include <set>
#include <algorithm>

int main( )
{
   using namespace std;

   set <int> s1;
   set <int>::iterator s1_Iter, s1_bIter, s1_eIter;

   s1.insert( 20 );
   s1.insert( 10 );
   s1.insert( 20 );   // won't insert as set elements are unique

   s1_bIter = s1.begin( );
   s1_eIter = s1.end( );

   set <int>::difference_type   df_typ5, df_typ10, df_typ20;

   df_typ5 = count( s1_bIter, s1_eIter, 5 );
   df_typ10 = count( s1_bIter, s1_eIter, 10 );
   df_typ20 = count( s1_bIter, s1_eIter, 20 );

   // the keys, and hence the elements of a set are unique,
   // so there's at most one of a given value
   cout << "The number '5' occurs " << df_typ5
        << " times in set s1.\n";
   cout << "The number '10' occurs " << df_typ10
        << " times in set s1.\n";
   cout << "The number '20' occurs " << df_typ20
        << " times in set s1.\n";

   // count the number of elements in a set
   set <int>::difference_type  df_count = 0;
   s1_Iter = s1.begin( );
   while ( s1_Iter != s1_eIter)
   {
      df_count++;
      s1_Iter++;
   }

   cout << "The number of elements in the set s1 is: "
        << df_count << "." << endl;
}
The number '5' occurs 0 times in set s1.
The number '10' occurs 1 times in set s1.
The number '20' occurs 1 times in set s1.
The number of elements in the set s1 is: 2.

emplace

Menyisipkan elemen yang dibangun di tempat (tidak ada operasi salin atau pemindahan yang dilakukan).

template <class... Args>
pair<iterator, bool>
emplace(
    Args&&... args);

Parameter

args
Argumen yang diteruskan untuk membuat elemen yang akan dimasukkan ke dalam set kecuali sudah berisi elemen yang nilainya diurutkan secara setara.

Tampilkan Nilai

Komponen pair bool yang mengembalikan true jika penyisipan dibuat, dan salah jika peta sudah berisi elemen yang nilainya memiliki nilai yang setara dalam pengurutan. Komponen iterator dari pasangan nilai pengembalian mengembalikan alamat tempat elemen baru dimasukkan (jika komponen bool benar) atau di mana elemen sudah berada (jika komponen bool salah).

Keterangan

Tidak ada iterator atau referensi yang tidak valid oleh fungsi ini.

Selama penempatan, jika pengecualian dilemparkan, status kontainer tidak dimodifikasi.

Contoh

// set_emplace.cpp
// compile with: /EHsc
#include <set>
#include <string>
#include <iostream>

using namespace std;

template <typename S> void print(const S& s) {
    cout << s.size() << " elements: ";

    for (const auto& p : s) {
        cout << "(" << p << ") ";
    }

    cout << endl;
}

int main()
{
    set<string> s1;

    auto ret = s1.emplace("ten");

    if (!ret.second){
        cout << "Emplace failed, element with value \"ten\" already exists."
            << endl << "  The existing element is (" << *ret.first << ")"
            << endl;
        cout << "set not modified" << endl;
    }
    else{
        cout << "set modified, now contains ";
        print(s1);
    }
    cout << endl;

    ret = s1.emplace("ten");

    if (!ret.second){
        cout << "Emplace failed, element with value \"ten\" already exists."
            << endl << "  The existing element is (" << *ret.first << ")"
            << endl;
    }
    else{
        cout << "set modified, now contains ";
        print(s1);
    }
    cout << endl;
}

emplace_hint

Menyisipkan elemen yang dibangun di tempat (tidak ada operasi salin atau pemindahan yang dilakukan), dengan petunjuk penempatan.

template <class... Args>
iterator emplace_hint(
    const_iterator where,
    Args&&... args);

Parameter

args
Argumen yang diteruskan untuk membuat elemen yang akan dimasukkan ke dalam set kecuali set sudah berisi elemen tersebut atau, lebih umum, kecuali sudah berisi elemen yang nilainya diurutkan secara setara.

where
Tempat untuk mulai mencari titik penyisipan yang benar. (Jika titik itu segera mendahului where, penyisipan dapat terjadi dalam waktu konstanta diamortisasi alih-alih waktu logaritmik.)

Tampilkan Nilai

Iterator ke elemen yang baru disisipkan.

Jika penyisipan gagal karena elemen sudah ada, mengembalikan iterator ke elemen yang ada.

Keterangan

Tidak ada iterator atau referensi yang tidak valid oleh fungsi ini.

Selama penempatan, jika pengecualian dilemparkan, status kontainer tidak dimodifikasi.

Contoh

// set_emplace.cpp
// compile with: /EHsc
#include <set>
#include <string>
#include <iostream>

using namespace std;

template <typename S> void print(const S& s) {
    cout << s.size() << " elements: " << endl;

    for (const auto& p : s) {
        cout << "(" << p <<  ") ";
    }

    cout << endl;
}

int main()
{
    set<string> s1;

    // Emplace some test data
    s1.emplace("Anna");
    s1.emplace("Bob");
    s1.emplace("Carmine");

    cout << "set starting data: ";
    print(s1);
    cout << endl;

    // Emplace with hint
    // s1.end() should be the "next" element after this emplacement
    s1.emplace_hint(s1.end(), "Doug");

    cout << "set modified, now contains ";
    print(s1);
    cout << endl;
}

empty

Menguji apakah satu set kosong.

bool empty() const;

Tampilkan Nilai

true jika set kosong; false jika set tidak ada.

Contoh

// set_empty.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int> s1, s2;
   s1.insert ( 1 );

   if ( s1.empty( ) )
      cout << "The set s1 is empty." << endl;
   else
      cout << "The set s1 is not empty." << endl;

   if ( s2.empty( ) )
      cout << "The set s2 is empty." << endl;
   else
      cout << "The set s2 is not empty." << endl;
}
The set s1 is not empty.
The set s2 is empty.

end

Mengembalikan iterator past-the-end.

const_iterator end() const;

iterator end();

Tampilkan Nilai

Iterator past-the-end. Jika set kosong, maka set::end() == set::begin().

Keterangan

end digunakan untuk menguji apakah iterator telah melewati akhir setnya.

Nilai yang dikembalikan oleh end tidak boleh didereferensikan.

Untuk contoh kode, lihat set::find.

equal_range

Mengembalikan sepasang iterator masing-masing ke elemen pertama dalam satu set dengan kunci yang lebih besar dari atau sama dengan kunci yang ditentukan dan ke elemen pertama dalam set dengan kunci yang lebih besar dari kunci.

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 set yang sedang dicari.

Tampilkan Nilai

Sepasang iterator di mana 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. pertama, dan untuk mendereferensikan iterator batas bawah, gunakan *(pr. pertama). Untuk mengakses iterator kedua pasangan pr yang dikembalikan oleh fungsi anggota, gunakan pr. kedua, dan untuk mendereferensikan iterator batas atas, gunakan *(pr. kedua).

Contoh

// set_equal_range.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   typedef set<int, less< int > > IntSet;
   IntSet s1;
   set <int, less< int > > :: const_iterator s1_RcIter;

   s1.insert( 10 );
   s1.insert( 20 );
   s1.insert( 30 );

   pair <IntSet::const_iterator, IntSet::const_iterator> p1, p2;
   p1 = s1.equal_range( 20 );

   cout << "The upper bound of the element with "
        << "a key of 20 in the set s1 is: "
        << *(p1.second) << "." << endl;

   cout << "The lower bound of the element with "
        << "a key of 20 in the set s1 is: "
        << *(p1.first) << "." << endl;

   // Compare the upper_bound called directly
   s1_RcIter = s1.upper_bound( 20 );
   cout << "A direct call of upper_bound( 20 ) gives "
        << *s1_RcIter << "," << endl
        << "matching the 2nd element of the pair"
        << " returned by equal_range( 20 )." << endl;

   p2 = s1.equal_range( 40 );

   // If no match is found for the key,
   // both elements of the pair return end( )
   if ( ( p2.first == s1.end( ) ) && ( p2.second == s1.end( ) ) )
      cout << "The set s1 doesn't have an element "
           << "with a key less than 40." << endl;
   else
      cout << "The element of set s1 with a key >= 40 is: "
           << *(p1.first) << "." << endl;
}
The upper bound of the element with a key of 20 in the set s1 is: 30.
The lower bound of the element with a key of 20 in the set s1 is: 20.
A direct call of upper_bound( 20 ) gives 30,
matching the 2nd element of the pair returned by equal_range( 20 ).
The set s1 doesn't have an element with a key less than 40.

erase

Menghapus elemen atau rentang elemen dalam set dari posisi tertentu atau menghapus elemen yang cocok dengan kunci tertentu.

iterator erase(
    const_iterator Where);

iterator erase(
    const_iterator First,
    const_iterator Last);

size_type erase(
    const key_type& Key);

Parameter

Where
Posisi elemen yang akan dihapus.

First
Posisi elemen pertama yang akan dihapus.

Last
Posisi tepat di luar elemen terakhir yang akan dihapus.

Key
Nilai kunci elemen yang akan dihapus.

Tampilkan Nilai

Untuk dua fungsi anggota pertama, iterator dua arah yang menunjuk elemen pertama yang tersisa di luar elemen apa pun yang dihapus, atau elemen yang merupakan akhir dari set jika tidak ada elemen tersebut.

Untuk fungsi anggota ketiga, mengembalikan jumlah elemen yang telah dihapus dari set.

Contoh

// set_erase.cpp
// compile with: /EHsc
#include <set>
#include <string>
#include <iostream>
#include <iterator> // next() and prev() helper functions

using namespace std;

using myset = set<string>;

void printset(const myset& s) {
    for (const auto& iter : s) {
        cout << " [" << iter << "]";
    }
    cout << endl << "size() == " << s.size() << endl << endl;
}

int main()
{
    myset s1;

    // Fill in some data to test with, one at a time
    s1.insert("Bob");
    s1.insert("Robert");
    s1.insert("Bert");
    s1.insert("Rob");
    s1.insert("Bobby");

    cout << "Starting data of set s1 is:" << endl;
    printset(s1);
    // The 1st member function removes an element at a given position
    s1.erase(next(s1.begin()));
    cout << "After the 2nd element is deleted, the set s1 is:" << endl;
    printset(s1);

    // Fill in some data to test with, one at a time, using an initializer list
    myset s2{ "meow", "hiss", "purr", "growl", "yowl" };

    cout << "Starting data of set s2 is:" << endl;
    printset(s2);
    // The 2nd member function removes elements
    // in the range [First, Last)
    s2.erase(next(s2.begin()), prev(s2.end()));
    cout << "After the middle elements are deleted, the set s2 is:" << endl;
    printset(s2);

    myset s3;

    // Fill in some data to test with, one at a time, using emplace
    s3.emplace("C");
    s3.emplace("C#");
    s3.emplace("D");
    s3.emplace("D#");
    s3.emplace("E");
    s3.emplace("E#");
    s3.emplace("F");
    s3.emplace("F#");
    s3.emplace("G");
    s3.emplace("G#");
    s3.emplace("A");
    s3.emplace("A#");
    s3.emplace("B");

    cout << "Starting data of set s3 is:" << endl;
    printset(s3);
    // The 3rd member function removes elements with a given Key
    myset::size_type count = s3.erase("E#");
    // The 3rd member function also returns the number of elements removed
    cout << "The number of elements removed from s3 is: " << count << "." << endl;
    cout << "After the element with a key of \"E#\" is deleted, the set s3 is:" << endl;
    printset(s3);
}

find

Mengembalikan iterator yang mengacu pada lokasi elemen dalam set yang memiliki kunci yang setara dengan kunci tertentu.

iterator find(const Key& key);

const_iterator find(const Key& key) const;

Parameter

key
Nilai kunci yang akan dicocokkan dengan kunci pengurutan elemen dari set yang sedang dicari.

Tampilkan Nilai

Iterator yang merujuk ke lokasi elemen dengan kunci tertentu, atau lokasi berhasil elemen terakhir dalam set (set::end()) jika tidak ada kecocokan yang ditemukan untuk kunci.

Keterangan

Fungsi anggota mengembalikan iterator yang mengacu pada elemen dalam set yang kuncinya setara dengan kunci argumen di bawah predikat biner yang menginduksi pengurutan berdasarkan hubungan yang kurang dari perbandingan.

Jika nilai find pengembalian ditetapkan ke , objek yang const_iteratorditetapkan tidak dapat dimodifikasi. Jika nilai find pengembalian ditetapkan ke , objek yang iteratorditetapkan dapat dimodifikasi

Contoh

// compile with: /EHsc /W4 /MTd
#include <set>
#include <iostream>
#include <vector>
#include <string>

using namespace std;

template <typename T> void print_elem(const T& t) {
    cout << "(" << t << ") ";
}

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()
{
    set<int> s1({ 40, 45 });
    cout << "The starting set s1 is: " << endl;
    print_collection(s1);

    vector<int> v;
    v.push_back(43);
    v.push_back(41);
    v.push_back(46);
    v.push_back(42);
    v.push_back(44);
    v.push_back(44); // attempt a duplicate

    cout << "Inserting the following vector data into s1: " << endl;
    print_collection(v);

    s1.insert(v.begin(), v.end());

    cout << "The modified set s1 is: " << endl;
    print_collection(s1);
    cout << endl;
    findit(s1, 45);
    findit(s1, 6);
}

get_allocator

Mengembalikan salinan objek alokator yang digunakan untuk membuat set.

allocator_type get_allocator() const;

Tampilkan Nilai

Alokator yang digunakan oleh set untuk mengelola memori, yang merupakan parameter Allocatortemplat .

Untuk informasi selengkapnya tentang Allocator, lihat bagian Keterangan dari set topik Kelas .

Keterangan

Alokator untuk kelas yang ditetapkan 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

// set_get_allocator.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int>::allocator_type s1_Alloc;
   set <int>::allocator_type s2_Alloc;
   set <double>::allocator_type s3_Alloc;
   set <int>::allocator_type s4_Alloc;

   // The following lines declare objects
   // that use the default allocator.
   set <int> s1;
   set <int, allocator<int> > s2;
   set <double, allocator<double> > s3;

   s1_Alloc = s1.get_allocator( );
   s2_Alloc = s2.get_allocator( );
   s3_Alloc = s3.get_allocator( );

   cout << "The number of integers that can be allocated"
        << endl << "before free memory is exhausted: "
        << s2.max_size( ) << "." << endl;

   cout << "\nThe number of doubles that can be allocated"
        << endl << "before free memory is exhausted: "
        << s3.max_size( ) <<  "." << endl;

   // The following line creates a set s4
   // with the allocator of multiset s1.
   set <int> s4( less<int>( ), s1_Alloc );

   s4_Alloc = s4.get_allocator( );

   // Two allocators are interchangeable if
   // storage allocated from each can be
   // deallocated by the other
   if( s1_Alloc == s4_Alloc )
   {
      cout << "\nThe allocators are interchangeable."
           << endl;
   }
   else
   {
      cout << "\nThe allocators are not interchangeable."
           << endl;
   }
}

memasukkan

Menyisipkan elemen atau rentang elemen ke dalam satu set.

// (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 dalam set kecuali sudah berisi elemen yang nilainya diurutkan secara setara.

Where
Tempat untuk mulai mencari titik penyisipan yang benar. (Jika titik itu segera mendahului Di mana, penyisipan dapat terjadi dalam waktu konstanta yang diamortisasi alih-alih waktu logaritma.)

ValTy
Parameter templat yang menentukan jenis argumen yang dapat digunakan set untuk membuat elemen value_typeVal , dan perfect-forwards sebagai argumen.

First
Posisi elemen pertama yang akan disalin.

Last
Posisi tepat di luar elemen terakhir yang akan disalin.

InputIterator
Argumen fungsi templat yang memenuhi persyaratan iterator input yang menunjuk ke elemen jenis yang dapat digunakan untuk membuat value_type objek.

IList
dari initializer_list mana untuk menyalin elemen.

Tampilkan Nilai

Anggota elemen tunggal berfungsi, (1) dan (2), mengembalikan pair komponen yang bool benar jika penyisipan dibuat, dan salah jika set sudah berisi elemen nilai yang setara dalam pengurutan. Komponen iterator dari pasangan nilai kembali menunjuk ke elemen yang baru disisipkan jika bool komponen tersebut benar, atau ke elemen yang ada jika bool komponen salah.

Fungsi anggota elemen-dengan-petunjuk tunggal, (3) dan (4), mengembalikan iterator yang menunjuk ke posisi di mana elemen baru dimasukkan ke dalam set atau, jika elemen dengan kunci yang setara sudah ada, ke elemen yang ada.

Keterangan

Tidak ada iterator, penunjuk, atau referensi yang tidak valid oleh fungsi ini.

Selama penyisipan hanya satu elemen, jika pengecualian dilemparkan, status kontainer tidak dimodifikasi. Selama penyisipan beberapa elemen, jika pengecualian dilemparkan, kontainer dibiarkan dalam status yang tidak ditentukan tetapi valid.

Untuk mengakses komponen pairpr iterator yang dikembalikan oleh fungsi anggota elemen tunggal, gunakan pr.first; untuk mendereferensikan iterator dalam pasangan yang dikembalikan, gunakan *pr.first, memberi Anda elemen. Untuk mengakses bool komponen, gunakan pr.second. Misalnya, lihat kode sampel nanti di artikel ini.

Dari value_type kontainer adalah typedef milik kontainer, dan, untuk set, set<V>::value_type adalah jenis const V.

Fungsi anggota rentang (5) menyisipkan urutan nilai elemen ke dalam set 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 s.insert(v.begin(), v.end()); mencoba menyisipkan semua elemen v ke dalam s. Hanya elemen yang memiliki nilai unik dalam rentang yang disisipkan; duplikat diabaikan. Untuk mengamati elemen mana yang ditolak, gunakan versi elemen tunggal dari insert.

Fungsi anggota daftar penginisialisasi (6) menggunakan initializer_list untuk menyalin elemen ke dalam set.

Untuk penyisipan elemen yang dibangun di tempat—yaitu, tidak ada operasi salin atau pemindahan yang dilakukan—lihat set::emplace dan set::emplace_hint.

Contoh

// set_insert.cpp
// compile with: /EHsc
#include <set>
#include <iostream>
#include <string>
#include <vector>

using namespace std;

template <typename S> void print(const S& s) {
    cout << s.size() << " elements: ";

    for (const auto& p : s) {
        cout << "(" << p << ") ";
    }

    cout << endl;
}

int main()
{
    // insert single values
    set<int> s1;
    // call insert(const value_type&) version
    s1.insert({ 1, 10 });
    // call insert(ValTy&&) version
    s1.insert(20);

    cout << "The original set values of s1 are:" << endl;
    print(s1);

    // intentionally attempt a duplicate, single element
    auto ret = s1.insert(1);
    if (!ret.second){
        auto elem = *ret.first;
        cout << "Insert failed, element with value 1 already exists."
            << endl << "  The existing element is (" << elem << ")"
            << endl;
    }
    else{
        cout << "The modified set values of s1 are:" << endl;
        print(s1);
    }
    cout << endl;

    // single element, with hint
    s1.insert(s1.end(), 30);
    cout << "The modified set values of s1 are:" << endl;
    print(s1);
    cout << endl;

    // The templatized version inserting a jumbled range
    set<int> s2;
    vector<int> v;
    v.push_back(43);
    v.push_back(294);
    v.push_back(41);
    v.push_back(330);
    v.push_back(42);
    v.push_back(45);

    cout << "Inserting the following vector data into s2:" << endl;
    print(v);

    s2.insert(v.begin(), v.end());

    cout << "The modified set values of s2 are:" << endl;
    print(s2);
    cout << endl;

    // The templatized versions move-constructing elements
    set<string>  s3;
    string str1("blue"), str2("green");

    // single element
    s3.insert(move(str1));
    cout << "After the first move insertion, s3 contains:" << endl;
    print(s3);

    // single element with hint
    s3.insert(s3.end(), move(str2));
    cout << "After the second move insertion, s3 contains:" << endl;
    print(s3);
    cout << endl;

    set<int> s4;
    // Insert the elements from an initializer_list
    s4.insert({ 4, 44, 2, 22, 3, 33, 1, 11, 5, 55 });
    cout << "After initializer_list insertion, s4 contains:" << endl;
    print(s4);
    cout << endl;
}

iterator

Jenis yang menyediakan iterator dua arah konstan yang dapat membaca elemen apa pun dalam satu set.

typedef implementation-defined iterator;

Contoh

Lihat contoh untuk begin contoh cara mendeklarasikan dan menggunakan iterator.

key_comp

Mengambil salinan objek perbandingan yang digunakan untuk mengurutkan kunci dalam satu set.

key_compare key_comp() const;

Tampilkan Nilai

Mengembalikan objek fungsi yang digunakan set untuk mengurutkan elemennya, yang merupakan parameter Traitstemplat .

Untuk informasi selengkapnya tentang Traits, lihat set topik Kelas .

Keterangan

Objek tersimpan menentukan fungsi anggota:

operator bool()(const Key&_xVal, const Key&_yVal);

yang mengembalikan true jika _xVal mendahului dan tidak sama dengan _yVal dalam urutan pengurutan.

Keduanya key_compare dan value_compare merupakan sinonim untuk parameter Traitstemplat . Kedua jenis disediakan untuk kelas set dan multiset, di mana mereka identik, untuk kompatibilitas dengan kelas peta dan multimap, di mana mereka berbeda.

Contoh

// set_key_comp.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;

   set <int, less<int> > s1;
   set<int, less<int> >::key_compare kc1 = s1.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 s1."
           << endl;
   }
   else
   {
      cout << "kc1( 2,3 ) returns value of false "
           << "where kc1 is the function object of s1."
           << endl;
   }

   set <int, greater<int> > s2;
   set<int, greater<int> >::key_compare kc2 = s2.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 s2."
           << endl;
   }
   else
   {
      cout << "kc2( 2,3 ) returns value of false, "
           << "where kc2 is the function object of s2."
           << endl;
   }
}
kc1( 2,3 ) returns value of true, where kc1 is the function object of s1.
kc2( 2,3 ) returns value of false, where kc2 is the function object of s2.

key_compare

Jenis yang menyediakan objek fungsi yang dapat membandingkan dua kunci pengurutan untuk menentukan urutan relatif dua elemen dalam set.

typedef Traits key_compare;

Keterangan

key_compare adalah sinonim untuk parameter Traitstemplat .

Untuk informasi selengkapnya tentang Traits, lihat set topik Kelas .

Keduanya key_compare dan value_compare merupakan sinonim untuk parameter Traitstemplat . Kedua jenis disediakan untuk kelas set dan multiset, di mana mereka identik, untuk kompatibilitas dengan kelas peta dan multimap, di mana mereka berbeda.

Contoh

Lihat contoh untuk key_comp contoh cara mendeklarasikan dan menggunakan key_compare.

key_type

Jenis yang menjelaskan objek yang disimpan sebagai elemen set dalam kapasitasnya sebagai kunci pengurutan.

typedef Key key_type;

Keterangan

key_type adalah sinonim untuk parameter Keytemplat .

Untuk informasi selengkapnya tentang Key, lihat bagian Keterangan dari set topik Kelas .

Keduanya key_type dan value_type merupakan sinonim untuk parameter Keytemplat . Kedua jenis disediakan untuk kelas set dan multiset, di mana mereka identik, untuk kompatibilitas dengan kelas peta dan multimap, di mana mereka berbeda.

Contoh

Lihat contoh untuk value_type contoh cara mendeklarasikan dan menggunakan key_type.

lower_bound

Mengembalikan iterator ke elemen pertama dalam satu set dengan kunci yang sama dengan atau lebih besar dari kunci yang ditentukan.

const_iterator lower_bound(const Key& key) const;

iterator lower_bound(const Key& key);

Parameter

key
Kunci argumen yang akan dibandingkan dengan kunci pengurutan elemen dari set yang sedang dicari.

Tampilkan Nilai

Iterator atau const_iterator yang membahas lokasi elemen dalam set yang dengan kunci yang sama dengan atau lebih besar dari kunci argumen atau yang membahas lokasi yang menggantikan elemen terakhir dalam set jika tidak ada kecocokan yang ditemukan untuk kunci.

Contoh

// set_lower_bound.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int> s1;
   set <int> :: const_iterator s1_AcIter, s1_RcIter;

   s1.insert( 10 );
   s1.insert( 20 );
   s1.insert( 30 );

   s1_RcIter = s1.lower_bound( 20 );
   cout << "The element of set s1 with a key of 20 is: "
        << *s1_RcIter << "." << endl;

   s1_RcIter = s1.lower_bound( 40 );

   // If no match is found for the key, end( ) is returned
   if ( s1_RcIter == s1.end( ) )
      cout << "The set s1 doesn't have an element "
           << "with a key of 40." << endl;
   else
      cout << "The element of set s1 with a key of 40 is: "
           << *s1_RcIter << "." << endl;

   // The element at a specific location in the set can be found
   // by using a dereferenced iterator that addresses the location
   s1_AcIter = s1.end( );
   s1_AcIter--;
   s1_RcIter = s1.lower_bound( *s1_AcIter );
   cout << "The element of s1 with a key matching "
        << "that of the last element is: "
        << *s1_RcIter << "." << endl;
}
The element of set s1 with a key of 20 is: 20.
The set s1 doesn't have an element with a key of 40.
The element of s1 with a key matching that of the last element is: 30.

max_size

Mengembalikan panjang maksimum set.

size_type max_size() const;

Tampilkan Nilai

Panjang maksimum yang mungkin dari set.

Contoh

// set_max_size.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int> s1;
   set <int>::size_type i;

   i = s1.max_size( );
   cout << "The maximum possible length "
        << "of the set is " << i << "." << endl;
}

operator=

Mengganti elemen ini set menggunakan elemen dari elemen lain set.

set& operator=(const set& right);

set& operator=(set&& right);

Parameter

right
Yang set menyediakan elemen baru untuk ditetapkan ke ini set.

Keterangan

Versi operator= pertama menggunakan referensi lvalue untuk right, untuk menyalin elemen dari right ke ini set.

Versi kedua menggunakan referensi rvalue untuk kanan. Ini memindahkan elemen dari right ke ini set.

Elemen apa pun dalam ini set sebelum fungsi operator dijalankan dibuang.

Contoh

// set_operator_as.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
   {
   using namespace std;
   set<int> v1, v2, v3;
   set<int>::iterator iter;

   v1.insert(10);

   cout << "v1 = " ;
   for (iter = v1.begin(); iter != v1.end(); iter++)
      cout << *iter << " ";
   cout << endl;

   v2 = v1;
   cout << "v2 = ";
   for (iter = v2.begin(); iter != v2.end(); iter++)
      cout << *iter << " ";
   cout << endl;

// move v1 into v2
   v2.clear();
   v2 = move(v1);
   cout << "v2 = ";
   for (iter = v2.begin(); iter != v2.end(); iter++)
      cout << *iter << " ";
   cout << endl;
   }

pointer

Jenis yang menyediakan penunjuk ke elemen dalam satu set.

typedef typename allocator_type::pointer pointer;

Keterangan

Jenis pointer dapat digunakan untuk mengubah nilai elemen.

Dalam kebanyakan kasus, harus iterator digunakan untuk mengakses elemen dalam objek yang ditetapkan.

rbegin

Mengembalikan iterator yang menangani elemen pertama dalam set terbalik.

const_reverse_iterator rbegin() const;

reverse_iterator rbegin();

Tampilkan Nilai

Iterator dua arah terbalik yang membahas elemen pertama dalam set terbalik atau mengatasi apa yang telah menjadi elemen terakhir dalam set yang tidak terbalik.

Keterangan

rbegin digunakan dengan set terbalik sama seperti begin yang digunakan dengan satu set.

Jika nilai rbegin pengembalian ditetapkan ke , maka objek yang const_reverse_iteratorditetapkan tidak dapat dimodifikasi. Jika nilai rbegin pengembalian ditetapkan ke reverse_iterator, maka objek yang ditetapkan dapat dimodifikasi.

rbegin dapat digunakan untuk melakukan iterasi melalui set mundur.

Contoh

// set_rbegin.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int> s1;
   set <int>::iterator s1_Iter;
   set <int>::reverse_iterator s1_rIter;

   s1.insert( 10 );
   s1.insert( 20 );
   s1.insert( 30 );

   s1_rIter = s1.rbegin( );
   cout << "The first element in the reversed set is "
        << *s1_rIter << "." << endl;

   // begin can be used to start an iteration
   // through a set in a forward order
   cout << "The set is:";
   for ( s1_Iter = s1.begin( ) ; s1_Iter != s1.end( ); s1_Iter++ )
      cout << " " << *s1_Iter;
   cout << endl;

   // rbegin can be used to start an iteration
   // through a set in a reverse order
   cout << "The reversed set is:";
   for ( s1_rIter = s1.rbegin( ) ; s1_rIter != s1.rend( ); s1_rIter++ )
      cout << " " << *s1_rIter;
   cout << endl;

   // A set element can be erased by dereferencing to its key
   s1_rIter = s1.rbegin( );
   s1.erase ( *s1_rIter );

   s1_rIter = s1.rbegin( );
   cout << "After the erasure, the first element "
        << "in the reversed set is "<< *s1_rIter << "." << endl;
}
The first element in the reversed set is 30.
The set is: 10 20 30
The reversed set is: 30 20 10
After the erasure, the first element in the reversed set is 20.

reference

Jenis yang menyediakan referensi ke elemen yang disimpan dalam satu set.

typedef typename allocator_type::reference reference;

Contoh

// set_reference.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int> s1;

   s1.insert( 10 );
   s1.insert( 20 );

   // Declare and initialize a reference &Ref1 to the 1st element
   const int &Ref1 = *s1.begin( );

   cout << "The first element in the set is "
        << Ref1 << "." << endl;
}
The first element in the set is 10.

rend

Mengembalikan iterator yang membahas lokasi yang menggantikan elemen terakhir dalam kumpulan terbalik.

const_reverse_iterator rend() const;

reverse_iterator rend();

Tampilkan Nilai

Iterator dua arah terbalik yang membahas lokasi yang menggantikan elemen terakhir dalam set terbalik (lokasi yang telah mendahului elemen pertama dalam set yang tidak terbalik).

Keterangan

rend digunakan dengan set terbalik sama seperti end yang digunakan dengan satu set.

Jika nilai rend pengembalian ditetapkan ke , maka objek yang const_reverse_iteratorditetapkan tidak dapat dimodifikasi. Jika nilai rend pengembalian ditetapkan ke reverse_iterator, maka objek yang ditetapkan dapat dimodifikasi. Nilai yang dikembalikan oleh rend tidak boleh didereferensikan.

rend dapat digunakan untuk menguji apakah iterator terbalik telah mencapai akhir kumpulannya.

Contoh

// set_rend.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main() {
   using namespace std;
   set <int> s1;
   set <int>::iterator s1_Iter;
   set <int>::reverse_iterator s1_rIter;
   set <int>::const_reverse_iterator s1_crIter;

   s1.insert( 10 );
   s1.insert( 20 );
   s1.insert( 30 );

   s1_rIter = s1.rend( );
   s1_rIter--;
   cout << "The last element in the reversed set is "
        << *s1_rIter << "." << endl;

   // end can be used to terminate an iteration
   // through a set in a forward order
   cout << "The set is: ";
   for ( s1_Iter = s1.begin( ) ; s1_Iter != s1.end( ); s1_Iter++ )
      cout << *s1_Iter << " ";
   cout << "." << endl;

   // rend can be used to terminate an iteration
   // through a set in a reverse order
   cout << "The reversed set is: ";
   for ( s1_rIter = s1.rbegin( ) ; s1_rIter != s1.rend( ); s1_rIter++ )
      cout << *s1_rIter << " ";
   cout << "." << endl;

   s1_rIter = s1.rend( );
   s1_rIter--;
   s1.erase ( *s1_rIter );

   s1_rIter = s1.rend( );
   --s1_rIter;
   cout << "After the erasure, the last element in the "
        << "reversed set is " << *s1_rIter << "." << endl;
}

reverse_iterator

Jenis yang menyediakan iterator dua arah yang dapat membaca atau memodifikasi elemen dalam set terbalik.

typedef std::reverse_iterator<iterator> reverse_iterator;

Keterangan

Jenis reverse_iterator digunakan untuk melakukan iterasi melalui set secara terbalik.

Contoh

Lihat contoh untuk rbegin contoh cara mendeklarasikan dan menggunakan reverse_iterator.

set

Membuat set yang kosong atau merupakan salinan dari semua atau sebagian dari beberapa set lainnya.

set();

explicit set(
    const Traits& Comp);

set(
    const Traits& Comp,
    const Allocator& Al);

set(
    const set& Right);

set(
    set&& Right);

set(
    initializer_list<Type> IList);

set(
    initializer_list<Type> IList,
    const Compare& Comp);

set(
    initializer_list<Type> IList,
    const Compare& Comp,
    const Allocator& Al);

template <class InputIterator>
set(
    InputIterator First,
    InputIterator Last);

template <class InputIterator>
set(
    InputIterator First,
    InputIterator Last,
    const Traits& Comp);

template <class InputIterator>
set(
    InputIterator First,
    InputIterator Last,
    const Traits& Comp,
    const Allocator& Al);

Parameter

Al
Kelas alokator penyimpanan yang akan digunakan untuk objek yang ditetapkan ini, yang default ke Allocator.

Comp
Fungsi perbandingan jenis const Traits yang digunakan untuk mengurutkan elemen dalam set, yang default ke Compare.

Rght
Set 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 set 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 set mereka.

Semua konstruktor menyimpan objek fungsi jenis Traits yang digunakan untuk membuat pesanan di antara kunci set dan yang nantinya dapat dikembalikan dengan memanggil key_comp.

Tiga konstruktor pertama menentukan set awal kosong, yang kedua menentukan jenis fungsi perbandingan (comp) yang akan digunakan dalam menetapkan urutan elemen dan yang ketiga secara eksplisit menentukan jenis alokator (al) yang akan digunakan. Kata kunci explicit menekan jenis konversi jenis otomatis tertentu.

Konstruktor keempat menentukan salinan set right.

Tiga konstruktor berikutnya menggunakan initializer_list untuk menentukan elemen.

Tiga konstruktor berikutnya menyalin rentang [ first, last) dari satu set dengan peningkatan eksplisititas dalam menentukan jenis fungsi perbandingan kelas Traits dan Allocator.

Konstruktor kedelapan menentukan salinan set dengan memindahkan right.

Contoh

// set_set.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main()
{
    using namespace std;

    // Create an empty set s0 of key type integer
    set <int> s0;

    // Create an empty set s1 with the key comparison
    // function of less than, then insert 4 elements
    set <int, less<int> > s1;
    s1.insert(10);
    s1.insert(20);
    s1.insert(30);
    s1.insert(40);

    // Create an empty set s2 with the key comparison
    // function of less than, then insert 2 elements
    set <int, less<int> > s2;
    s2.insert(10);
    s2.insert(20);

    // Create a set s3 with the
    // allocator of set s1
    set <int>::allocator_type s1_Alloc;
    s1_Alloc = s1.get_allocator();
    set <int> s3(less<int>(), s1_Alloc);
    s3.insert(30);

    // Create a copy, set s4, of set s1
    set <int> s4(s1);

    // Create a set s5 by copying the range s1[ first,  last)
    set <int>::const_iterator s1_bcIter, s1_ecIter;
    s1_bcIter = s1.begin();
    s1_ecIter = s1.begin();
    s1_ecIter++;
    s1_ecIter++;
    set <int> s5(s1_bcIter, s1_ecIter);

    // Create a set s6 by copying the range s4[ first,  last)
    // and with the allocator of set s2
    set <int>::allocator_type s2_Alloc;
    s2_Alloc = s2.get_allocator();
    set <int> s6(s4.begin(), ++s4.begin(), less<int>(), s2_Alloc);

    cout << "s1 =";
    for (auto i : s1)
        cout << " " << i;
    cout << endl;

    cout << "s2 = " << *s2.begin() << " " << *++s2.begin() << endl;

    cout << "s3 =";
    for (auto i : s3)
        cout << " " << i;
    cout << endl;

    cout << "s4 =";
    for (auto i : s4)
        cout << " " << i;
    cout << endl;

    cout << "s5 =";
    for (auto i : s5)
        cout << " " << i;
    cout << endl;

    cout << "s6 =";
    for (auto i : s6)
        cout << " " << i;
    cout << endl;

    // Create a set by moving s5
    set<int> s7(move(s5));
    cout << "s7 =";
    for (auto i : s7)
        cout << " " << i;
    cout << endl;

    // Create a set with an initializer_list
    cout << "s8 =";
    set<int> s8{ { 1, 2, 3, 4 } };
    for (auto i : s8)
        cout << " " << i;
    cout << endl;

    cout << "s9 =";
    set<int> s9{ { 5, 6, 7, 8 }, less<int>() };
    for (auto i : s9)
        cout << " " << i;
    cout << endl;

    cout << "s10 =";
    set<int> s10{ { 10, 20, 30, 40 }, less<int>(), s9.get_allocator() };
    for (auto i : s10)
        cout << " " << i;
    cout << endl;
}
s1 = 10 20 30 40s2 = 10 20s3 = 30s4 = 10 20 30 40s5 = 10 20s6 = 10s7 = 10 20s8 = 1 2 3 4s9 = 5 6 7 8s10 = 10 20 30 40

size

Mengembalikan jumlah elemen di RDD.

size_type size() const;

Tampilkan Nilai

Panjang set saat ini.

Contoh

// set_size.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int> s1;
   set <int> :: size_type i;

   s1.insert( 1 );
   i = s1.size( );
   cout << "The set length is " << i << "." << endl;

   s1.insert( 2 );
   i = s1.size( );
   cout << "The set length is now " << i << "." << endl;
}
The set length is 1.
The set length is now 2.

size_type

Jenis bilangan bulat yang tidak ditandatangani yang dapat mewakili jumlah elemen dalam satu set.

typedef typename allocator_type::size_type size_type;

Contoh

Lihat contoh untuk size contoh cara mendeklarasikan dan menggunakan size_type

swap

Menukar elemen dari dua set.

void swap(
    set<Key, Traits, Allocator>& right);

Parameter

right
Kumpulan argumen yang menyediakan elemen yang akan ditukar dengan kumpulan target.

Keterangan

Fungsi anggota tidak membatalkan referensi, pointer, atau iterator yang menunjuk elemen dalam dua set yang elemennya sedang ditukar.

Contoh

// set_swap.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int> s1, s2, s3;
   set <int>::iterator s1_Iter;

   s1.insert( 10 );
   s1.insert( 20 );
   s1.insert( 30 );
   s2.insert( 100 );
   s2.insert( 200 );
   s3.insert( 300 );

   cout << "The original set s1 is:";
   for ( s1_Iter = s1.begin( ); s1_Iter != s1.end( ); s1_Iter++ )
      cout << " " << *s1_Iter;
   cout   << "." << endl;

   // This is the member function version of swap
   s1.swap( s2 );

   cout << "After swapping with s2, list s1 is:";
   for ( s1_Iter = s1.begin( ); s1_Iter != s1.end( ); s1_Iter++ )
      cout << " " << *s1_Iter;
   cout  << "." << endl;

   // This is the specialized template version of swap
   swap( s1, s3 );

   cout << "After swapping with s3, list s1 is:";
   for ( s1_Iter = s1.begin( ); s1_Iter != s1.end( ); s1_Iter++ )
      cout << " " << *s1_Iter;
   cout   << "." << endl;
}
The original set s1 is: 10 20 30.
After swapping with s2, list s1 is: 100 200.
After swapping with s3, list s1 is: 300.

upper_bound

Mengembalikan iterator ke elemen pertama dalam set yang dengan kunci yang lebih besar dari kunci yang ditentukan.

const_iterator upper_bound(const Key& key) const;

iterator upper_bound(const Key& key);

Parameter

key
Kunci argumen yang akan dibandingkan dengan kunci pengurutan elemen dari set yang sedang dicari.

Tampilkan Nilai

iterator Atau const_iterator yang membahas lokasi elemen dalam set yang dengan kunci yang lebih besar dari kunci argumen, atau yang membahas lokasi yang menggantikan elemen terakhir dalam set jika tidak ada kecocokan yang ditemukan untuk kunci.

Contoh

// set_upper_bound.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int> s1;
   set <int> :: const_iterator s1_AcIter, s1_RcIter;

   s1.insert( 10 );
   s1.insert( 20 );
   s1.insert( 30 );

   s1_RcIter = s1.upper_bound( 20 );
   cout << "The first element of set s1 with a key greater "
        << "than 20 is: " << *s1_RcIter << "." << endl;

   s1_RcIter = s1.upper_bound( 30 );

   // If no match is found for the key, end( ) is returned
   if ( s1_RcIter == s1.end( ) )
      cout << "The set s1 doesn't have an element "
           << "with a key greater than 30." << endl;
   else
      cout << "The element of set s1 with a key > 40 is: "
           << *s1_RcIter << "." << endl;

   // The element at a specific location in the set can be found
   // by using a dereferenced iterator addressing the location
   s1_AcIter = s1.begin( );
   s1_RcIter = s1.upper_bound( *s1_AcIter );
   cout << "The first element of s1 with a key greater than"
        << endl << "that of the initial element of s1 is: "
        << *s1_RcIter << "." << endl;
}
The first element of set s1 with a key greater than 20 is: 30.
The set s1 doesn't have an element with a key greater than 30.
The first element of s1 with a key greater than
that of the initial element of s1 is: 20.

value_comp

Mengambil salinan objek perbandingan yang digunakan untuk mengurutkan nilai elemen dalam satu set.

value_compare value_comp() const;

Tampilkan Nilai

Mengembalikan objek fungsi yang digunakan set untuk mengurutkan elemennya, yang merupakan parameter Traitstemplat .

Untuk informasi selengkapnya tentang Traits, lihat set topik Kelas .

Keterangan

Objek tersimpan menentukan fungsi anggota:

operator bool(const Key&_xVal, const Key&_yVal);

yang mengembalikan true jika _xVal mendahului dan tidak sama dengan _yVal dalam urutan pengurutan.

Keduanya value_compare dan key_compare merupakan sinonim untuk parameter Traitstemplat . Kedua jenis disediakan untuk kelas set dan multiset, di mana mereka identik, untuk kompatibilitas dengan kelas peta dan multimap, di mana mereka berbeda.

Contoh

// set_value_comp.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;

   set <int, less<int> > s1;
   set <int, less<int> >::value_compare vc1 = s1.value_comp( );
   bool result1 = vc1( 2, 3 );
   if( result1 == true )
   {
      cout << "vc1( 2,3 ) returns value of true, "
           << "where vc1 is the function object of s1."
           << endl;
   }
   else
   {
      cout << "vc1( 2,3 ) returns value of false, "
           << "where vc1 is the function object of s1."
           << endl;
   }

   set <int, greater<int> > s2;
   set<int, greater<int> >::value_compare vc2 = s2.value_comp( );
   bool result2 = vc2( 2, 3 );
   if( result2 == true )
   {
      cout << "vc2( 2,3 ) returns value of true, "
           << "where vc2 is the function object of s2."
           << endl;
   }
   else
   {
      cout << "vc2( 2,3 ) returns value of false, "
           << "where vc2 is the function object of s2."
           << endl;
   }
}
vc1( 2,3 ) returns value of true, where vc1 is the function object of s1.
vc2( 2,3 ) returns value of false, where vc2 is the function object of s2.

value_compare

Jenis yang menyediakan objek fungsi yang dapat membandingkan dua nilai elemen untuk menentukan urutan relatifnya dalam set.

typedef key_compare value_compare;

Keterangan

value_compare adalah sinonim untuk parameter Traitstemplat .

Untuk informasi selengkapnya tentang Traits, lihat set topik Kelas .

Keduanya key_compare dan value_compare merupakan sinonim untuk parameter Traitstemplat . Kedua jenis disediakan untuk kelas set dan multiset, di mana mereka identik, untuk kompatibilitas dengan kelas peta dan multimap, di mana mereka berbeda.

Contoh

Lihat contoh untuk value_comp contoh cara mendeklarasikan dan menggunakan value_compare.

value_type

Jenis yang menjelaskan objek yang disimpan sebagai elemen set dalam kapasitasnya sebagai nilai.

typedef Key value_type;

Keterangan

value_type adalah sinonim untuk parameter Keytemplat .

Untuk informasi selengkapnya tentang Key, lihat bagian Keterangan dari set topik Kelas .

Keduanya key_type dan value_type merupakan sinonim untuk parameter Keytemplat . Kedua jenis disediakan untuk kelas set dan multiset, di mana mereka identik, untuk kompatibilitas dengan kelas peta dan multimap, di mana mereka berbeda.

Contoh

// set_value_type.cpp
// compile with: /EHsc
#include <set>
#include <iostream>

int main( )
{
   using namespace std;
   set <int> s1;
   set <int>::iterator s1_Iter;

   set <int>::value_type svt_Int;   // Declare value_type
   svt_Int = 10;            // Initialize value_type

   set <int> :: key_type skt_Int;   // Declare key_type
   skt_Int = 20;             // Initialize key_type

   s1.insert( svt_Int );         // Insert value into s1
   s1.insert( skt_Int );         // Insert key into s1

   // A set accepts key_types or value_types as elements
   cout << "The set has elements:";
   for ( s1_Iter = s1.begin( ) ; s1_Iter != s1.end( ); s1_Iter++)
      cout << " " << *s1_Iter;
   cout << "." << endl;
}
The set has elements: 10 20.