如需轉載,請註明出處。
集合是一種關聯容器,其中每個元素必須是唯一的,因爲元素的值標識它。一旦將元素添加到集合中,就無法修改該元素的值,但可以刪除並添加該元素的修改值。
Set相關的一些基本函數:
begin() - 返回集合中第一個元素的迭代器。
end() - 返回跟隨集合中最後一個元素的理論元素的迭代器。
size() - 返回集合中的元素數。
max_size() - 返回集合可容納的最大元素數。
empty() - 返回集合是否爲空。
#include <iostream>
#include <set>
#include <iterator>
using namespace std;
int main()
{
// empty set container
set <int, greater <int> > gquiz1;
// insert elements in random order
gquiz1.insert(40);
gquiz1.insert(30);
gquiz1.insert(60);
gquiz1.insert(20);
gquiz1.insert(50);
gquiz1.insert(50); // only one 50 will be added to the set
gquiz1.insert(10);
// printing set gquiz1
set <int, greater <int> > :: iterator itr;
cout << "\nThe set gquiz1 is : ";
for (itr = gquiz1.begin(); itr != gquiz1.end(); ++itr)
{
cout << '\t' << *itr;
}
cout << endl;
// assigning the elements from gquiz1 to gquiz2
set <int> gquiz2(gquiz1.begin(), gquiz1.end());
// print all elements of the set gquiz2
cout << "\nThe set gquiz2 after assign from gquiz1 is : ";
for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr)
{
cout << '\t' << *itr;
}
cout << endl;
// remove all elements up to 30 in gquiz2
cout << "\ngquiz2 after removal of elements less than 30 : ";
gquiz2.erase(gquiz2.begin(), gquiz2.find(30));
for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr)
{
cout << '\t' << *itr;
}
// remove element with value 50 in gquiz2
int num;
num = gquiz2.erase (50);
cout << "\ngquiz2.erase(50) : ";
cout << num << " removed \t" ;
for (itr = gquiz2.begin(); itr != gquiz2.end(); ++itr)
{
cout << '\t' << *itr;
}
cout << endl;
//lower bound and upper bound for set gquiz1
cout << "gquiz1.lower_bound(40) : "
<< *gquiz1.lower_bound(40) << endl;
cout << "gquiz1.upper_bound(40) : "
<< *gquiz1.upper_bound(40) << endl;
//lower bound and upper bound for set gquiz2
cout << "gquiz2.lower_bound(40) : "
<< *gquiz2.lower_bound(40) << endl;
cout << "gquiz2.upper_bound(40) : "
<< *gquiz2.upper_bound(40) << endl;
return 0;
}
上述程序的輸出是:
The set gquiz1 is : 60 50 40 30 20 10
The set gquiz2 after assign from gquiz1 is : 10 20 30 40 50 60
gquiz2 after removal of elements less than 30 : 30 40 50 60
gquiz2.erase(50) : 1 removed 30 40 60
gquiz1.lower_bound(40) : 40
gquiz1.upper_bound(40) : 30
gquiz2.lower_bound(40) : 40
gquiz2.upper_bound(40) : 60
Set的方法:
begin() - 返回集合中第一個元素的迭代器。
end() - 返回跟隨集合中最後一個元素的理論元素的迭代器。
rbegin() - 返回指向容器中最後一個元素的反向迭代器。
rend() - 返回指向集合容器中第一個元素之前的理論元素的反向迭代器。
crbegin() - 返回指向容器中最後一個元素的常量迭代器。
crend() - 返回一個指向容器中第一個元素之前位置的常量迭代器。
cbegin() - 返回指向容器中第一個元素的常量迭代器。
cend() - 返回一個指向容器中最後一個元素之後的位置的常量迭代器。
size() - 返回集合中的元素數。
max_size() - 返回集合可容納的最大元素數。
empty() - 返回集合是否爲空。
insert(const g) - 向集合添加新元素“g”。
iterator insert(iterator position,const g) - 在迭代器指向的位置添加一個新元素“g”。
erase(iterator position) - 刪除迭代器指向的位置處的元素。
erase(const g) - 從集合中刪除值“g”。
clear() - 從集合中刪除所有元素。
key_comp()/ value_comp() - 返回確定集合中元素的排序方式的對象(默認情況下爲“<”)。
find(const g) - 如果找到則返回集合中元素'g'的迭代器,否則返回迭代器結束。
count(const g) - 基於元素'g'的返回1或0是否存在於集合中。
lower_bound(const g) - 返回第一個元素的迭代器,它等同於'g',或者肯定不會在集合中的元素'g'之前。
upper_bound(const g) - 返回第一個元素的迭代器,它等同於'g',或者肯定會在集合中的元素'g'之後。
equal_range() - 該函數返回一對迭代器。 (key_comp)。該對指的是包含容器中具有等於k的鍵的所有元素的範圍。
emplace() - 此函數用於將新元素插入到set容器中,前提是要插入的元素是唯一的且在集合中尚不存在。
emplace_hint() - 返回指向插入完成位置的迭代器。如果參數中傳遞的元素已經存在,那麼它將返回一個指向現有元素所在位置的迭代器。
swap() - 此函數用於交換兩個集的內容,但這些集必須是相同的類型,儘管大小可能不同。
operator = - '='是C ++ STL中的一個運算符,它將一個集合複製(或移動)到另一個集合,而set :: operator =是相應的運算符函數。
get_allocator() - 返回與set關聯的allocator對象的副本。