如需转载,请注明出处。
集合是一种关联容器,其中每个元素必须是唯一的,因为元素的值标识它。一旦将元素添加到集合中,就无法修改该元素的值,但可以删除并添加该元素的修改值。
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对象的副本。