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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章