Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
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_comp
anggota . 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 set maksimum . |
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 set s. |
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 Allocator
templat .
Mengembalikan objek fungsi yang digunakan multiset untuk mengurutkan elemennya, yang merupakan parameter Allocator
templat .
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 cbegin
pengembalian , elemen dalam rentang tidak dapat dimodifikasi.
Anda dapat menggunakan fungsi anggota ini sebagai pengganti begin()
fungsi anggota untuk menjamin bahwa nilai yang dikembalikan adalah const_iterator
. Biasanya, ini digunakan bersama dengan auto
kata kunci pengurangan jenis, seperti yang ditunjukkan dalam contoh berikut. Dalam contoh, pertimbangkan Container
untuk menjadi kontainer yang dapat dimodifikasi (non- const
) dari segala jenis yang mendukung begin()
dan cbegin()
.
auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();
// i2 is Container<T>::const_iterator
cend
Mengembalikan iterator const
yang membahas lokasi tepat di luar elemen terakhir dalam rentang.
const_iterator cend() const;
Tampilkan Nilai
Iterator const
akses dua arah yang menunjuk tepat di luar akhir rentang.
Keterangan
cend
digunakan untuk menguji apakah iterator telah melewati akhir rentangnya.
Anda dapat menggunakan fungsi anggota ini sebagai pengganti end()
fungsi anggota untuk menjamin bahwa nilai yang dikembalikan adalah const_iterator
. Biasanya, ini digunakan bersama dengan auto
kata kunci pengurangan jenis, seperti yang ditunjukkan dalam contoh berikut. Dalam contoh, pertimbangkan Container
untuk menjadi kontainer yang dapat dimodifikasi (non- const
) dari segala jenis yang mendukung end()
dan cend()
.
auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();
// i2 is Container<T>::const_iterator
Nilai yang dikembalikan oleh cend
tidak boleh didereferensikan.
clear
Menghapus semua elemen 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 crbegin
pengembalian , 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 crend
pengembalian , 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_iterator
ditetapkan tidak dapat dimodifikasi. Jika nilai find
pengembalian ditetapkan ke , objek yang iterator
ditetapkan 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 Allocator
templat .
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_type
Val , 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 pair
pr
iterator yang dikembalikan oleh fungsi anggota elemen tunggal, gunakan pr.first
; untuk mendereferensikan iterator dalam pasangan yang dikembalikan, gunakan *pr.first
, memberi Anda elemen. Untuk mengakses bool
komponen, gunakan pr.second
. Misalnya, lihat kode sampel nanti di artikel ini.
Dari value_type
kontainer adalah typedef milik kontainer, dan, untuk 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 Traits
templat .
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 Traits
templat . 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 Traits
templat .
Untuk informasi selengkapnya tentang Traits
, lihat set
topik Kelas .
Keduanya key_compare
dan value_compare
merupakan sinonim untuk parameter Traits
templat . 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 Key
templat .
Untuk informasi selengkapnya tentang Key
, lihat bagian Keterangan dari set
topik Kelas .
Keduanya key_type
dan value_type
merupakan sinonim untuk parameter Key
templat . 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_iterator
ditetapkan 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_iterator
ditetapkan 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 Traits
templat .
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 Traits
templat . 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 Traits
templat .
Untuk informasi selengkapnya tentang Traits
, lihat set
topik Kelas .
Keduanya key_compare
dan value_compare
merupakan sinonim untuk parameter Traits
templat . 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 Key
templat .
Untuk informasi selengkapnya tentang Key
, lihat bagian Keterangan dari set
topik Kelas .
Keduanya key_type
dan value_type
merupakan sinonim untuk parameter Key
templat . 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.