STL教程(五)——Set

如需转载,请注明出处。

集合是一种关联容器,其中每个元素必须是唯一的,因为元素的值标识它。一旦将元素添加到集合中,就无法修改该元素的值,但可以删除并添加该元素的修改值。

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对象的副本。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值