- c++中的Set是什麼?
- 什麼時候使用集合?
- 實現集
- 與集合有關的一些基本函數
- 在c++中初始化一個集合
- c++中set的屬性
- c++實現set的代碼
- 方法集
- set、multiset和unordered_set的區別
- c++中的setprecision是什麼?
- 如何在c++中設置小數點?
- 結論
c++有很多有用的元素和工具來幫助我們進行有競爭力的編程。其中一個組件是標準模板庫(Standard Template Library, STL)中的集合,它提供了一種有效地以排序方式存儲數據的方法。這篇c++中的set指南涵蓋了你需要知道的關於set的所有要點。
集合是c++ STL中用於按給定順序存儲元素的容器。集合的元素必須是唯一的。值本身可以標識集合中的每個元素,也就是說,它們本身充當鍵。在c++中,可以向set中插入元素或從set中刪除元素,但不能對其進行修改,因為一旦存儲在set中,這些值就變成了常量。隨著本文的閱讀,您將對c++中的集合有更多的了解,從c++中的集合開始,一直到Interlinks。
c++中的Set是什麼?
如上所述,c++中的集合是STL容器的類型,用於以排序的方式存儲元素。允許對集合執行的操作包括插入和刪除。在set類型容器中,元素按照嚴格的弱排序進行內部排序。由於容器中的元素是常量,因此不能操作或操作集合中現有元素的值。集合中的元素通過惟一地標識它而充當其自身的鍵。因此,集合隻允許保存唯一的值。
為了在c++中遍曆集合,我們使用了迭代器。
什麼時候使用集合?
集合是競爭性編程中經常使用的容器;每當需要以排序的方式存儲元素時,可以考慮使用集合,但請記住,集合不允許存儲重複的值。該值一旦存儲,就不能修改。
實現集
- 使用迭代器遍曆集合。
- 我們必須包含兩個主要的頭文件來處理集合。
#include< set >
#include< iterator >
- 我們也可以隻使用這一個頭文件,而不是使用上麵兩個頭文件。
這個頭文件包含了所有的頭文件,所以我們隻能使用這個頭文件,
而不是所有其他頭文件。
#include< bits/stdc++.h >
與集合有關的一些基本函數
- 開始():-返回一個迭代器到集合的第一個元素。
- 結束():-返回一個迭代器到集合中最後一個元素後麵的理論元素。
- 空():-檢查set是否為空。
- max_size ():-返回set可以容納的最大元素數。
- 尺寸():-返回集合中元素的個數。
在c++中初始化一個集合
在c++中,在初始化set時定義了要存儲在set中的值的類型。默認情況下,集合中的數值按遞增順序存儲。如果希望按降序存儲,可以使用greater
- 空集
- 設置值
- 用另一個Set初始化的Set
- 用Array初始化Set。
下麵是一個描述在c++中初始化和打印集合的示例。
#include #include using namespace std;int main(){//空Set Set set1;// set1 ={} //空集-降序集> set2;// set2 = {} // Set > set3 = {6,10,5,1};// set3 ={10,6,5,1} //使用其他Set Set > set4(set3);// set4 ={10,6,5,1} //從數組int初始化集合arr[] = {10,4,5,61};Set :: iterator it;//使用for loop - (1) for (auto it = set5.begin();=set5.end(); It ++) {cout<
輸出:
4
5
10
61
在上麵的示例中,展示了在c++中初始化集合的不同方法。為了顯示集合,我們使用For循環以及begin()和end()函數來獲取集合的第一個和最後一個元素的位置。我們已經使用迭代器' it '對set5進行了迭代。該迭代器迭代集合中元素的位置。由於set中整數元素的順序默認為升序,因此存儲在set5中的數組元素按遞增順序排序,如輸出中所示。
c++中set的屬性
下麵給出了c++中集合的一些常見屬性:
- 唯一性:c++中集合的每個元素都必須是唯一的,即不允許有重複的值。因此,我們可以說c++中的集合不支持冗餘。
- 排序的性質:set容器中的元素以排序的方式自動存儲。
- 不可變的性質:一旦這些值存儲在集合中,就不能更改它們。因此,允許插入和刪除,但不能更新或修改該集合的現有元素。
- 內部實現的屬性:c++中集合的邏輯實現是使用BST完成的。
取消索引的屬性:由於c++ STL不提供索引支持,所以c++中的集合也是無索引的。
c++實現set的代碼:
#include using namespace std;Int main() {set < Int > s;//按隨機順序插入元素。S.insert (60);S.insert (10);S.insert (20);S.insert (20);S.insert (40);S.insert (50);//打印集合s //初始化迭代器,迭代到集合的開頭。 set::iterator it ; cout << "The element of set s are : \n"; for (it = s.begin() ; it != s.end() ; it++ ) { cout << *it<<" "; } cout << endl; cout<< ”The size of set : \n ” << s.size() <
輸出:
集合s的元素有:
10 20 40 50 60
集的大小:5
- 在集合中按降序存儲元素。
默認情況下,元素在集合中按升序存儲。要按降序存儲元素,必須使用給定的聲明語法。
//集合的聲明語法,以降序存儲元素。
設置< int,更高的< int > >;
find (): -
返回一個指向該元素的迭代器,如果找到該元素,則返回一個迭代器
指向集合的末端。
語法:
set_name。查找(鍵);
刪除():-
此方法用於從集合中刪除元素
語法:
set_name。Erase (starting_iterator, ending_iterator);
set在c++中的實現代碼:-
#include using namespace std;Int main() {set< Int >s;S.insert (34);S.insert (14);S.insert (13);S.insert (56);S.insert (5);S.insert (23);S.insert (10);S.insert (4); set :: iterator it; cout<<”the elements of set are : \n“; for(it = s.begin() ; it != s.end() ; it++) { cout<<*it<< ” “; } cout<< endl ; // Removing all elements upto 10 cout<< ” elements of set s after deleting elements upto 10 \n ” ; s.erase(s.begin() , s.find(10) ) ; for ( it = s.begin() ; it!=s.end() ; it++) cout<< *it << ” “ ; // Performing Lower bound and upper bound in set cout<< ” lower bound of 13 \n ” ; cout<< *s.lower_bound(13)<
輸出:
set的元素有:
4 5 10 13 14 23 34 56
刪除集合s中最多1個元素後的所有元素
10 13 14 23 34 56
13的下界
13
34的下界
34
13的上界
14
34的上界
56
方法集
c++中可以對集合執行各種各樣的操作。讓我們看一些重要的集合方法。
- 開始()此方法返回一個指向集合中第一個元素的迭代器。
- 結束()函數返回一個迭代器,該迭代器指向集合中最後一個元素旁邊的理論位置。
- 空():用於檢查集合是否為空。
- 尺寸():此函數給出集合中存在的元素個數。
- max_size ()此方法返回集合中元素的上界,即集合可以容納的最大數量。
- rbegin ():與begin()方法相反,此方法返回指向集合最後一個元素的反向迭代器。
- 撕裂():與begin()方法相反,此方法返回一個反向迭代器,指向集合中最後一個元素之前的邏輯位置。
- 擦除(迭代器_位置):此方法應用於set對象時,移除形參中給出的指針所指向位置的元素。
- 擦除(const_n):該函數直接從set中刪除形參傳遞的值n。
- 插入(const_n)函數將一個新元素' n '插入到集合中。
- Find (n):此方法在集合中搜索元素' n ',並返回一個指向所找到元素位置的迭代器。如果未找到該元素,則返回指向末尾的迭代器。
- Count (const_n)這個set方法檢查傳遞的值' n '是否存在,如果找到或未找到元素,則分別返回0或1。
- clear ():刪除集合中存在的所有元素。
看一下下麵的c++代碼,可以更好地理解上述方法的實現。
//在線c++編譯器在線運行c++程序#include #include using namespace std;Int main(){set< Int > s = {10,12,15,6};Set :: iterator;cout<<"第一個元素是:"<<*(s.begin());/ /開始()cout < <“\ nLast元素:“< < *——(s.end ()) < < endl;// end() //遍曆()for (auto it = s.begin();它! = s.end ();It ++) {cout<<" "<<* It;} cout < < endl;if(s.empty()) // empty() cout<<" empty "; else cout<<"Not empty"; cout<<"\nSize of the set: "<
輸出:
第一個元素是
最後一個元素是:15
6 10 12 15
非空
套裝大小:4
最大尺寸:230584300921369395
在移除第一個元素和第12個元素之後:10 15
插入新元素5後:5 10 15
15在集合中存在
現在,集合是空的
set、multiset和unordered_set的區別
參數 | 集 | 多重集 | unordered_set |
存儲順序 | 以排序的方式存儲元素 | 以排序的方式存儲元素——按遞增或遞減的順序 | 以無序的順序存儲元素 |
元素類型 | 隻保存唯一的元素 | 它可以保存重複的值 | 隻允許唯一的值 |
修改 | 可以插入和刪除元素,但不允許修改元素 | 元素的刪除可以借助迭代器完成 | 可以插入和刪除元素,但不允許修改元素 |
實現 | 內部實現通過二叉搜索樹 | 內部實現通過二叉搜索樹 | 使用哈希表在內部實現 |
刪除元素 | 通過給出起始和結束迭代器,可以擦除多個元素 | 可以擦除指定了迭代器位置的元素 | 可以擦除指定了迭代器位置的元素 |
語法 | <設置數據類型> setName | <數據類型>多重集multiSetName; | <數據類型> unordered_set UnorderedSetName; |
設置:
- Set按排序順序存儲元素。
- Set存儲唯一的元素。
- 元素隻能在集合內插入和刪除,不能修改。
- 集合是使用二叉搜索樹實現的。
- 使用迭代器遍曆集合。
c++程序顯示了插入和刪除功能的集合。
#include using namespace std;Int main(){//聲明集合。Set < int >;//使用insert()添加隨機元素。S.insert (13);S.insert (11);S.insert (44);insert(1);S.insert (10);S.insert (25); s.insert( 11 ) ; // 11 will only be added only once . // declaring iterators to traverse through the set . set s :: iterator ptr1 , ptr2 , ptr3 ; cout << “ set elements are initially : \n” ; for ( ptr1 = s.begin() ; ptr1 != s.end() ; ptr1++) { cout<< *ptr1 << “ “ ; } cout < > s2 ( s.begin() , s.end() ); set < int , greater > :: iterator itr ; ptr2 = s.find( 11 ) ; ptr3 = s.find( 25) ; // elements from 11 to 25 are erased from the set using the erase() . s.erase ( ptr2 , ptr3); cout << ” set element after erase : \n ” ; for ( ptr1 = s.begin() ; ptr1 != s.end() ; ptr1++) { cout << *ptr1 << “ “; } cout << endl ; cout << “ elements of set s2 are : \n” ; for ( itr = s2.begin() ; itr != s2.end() ; itr++) { cout << *itr << “ “; } return 0; }
輸出:
集合元素最初是:
1 10 11 13 25 44
擦除後設置元素:
1 10 25 44
集合s2的元素有:
44 25 13 11 10 1
多重集:
- 它還可以存儲元素以升序或降序的方式排序。
- Multiset允許多次存儲相同的值;換句話說,重複的值可以存儲在multiset中。
- 可以使用迭代器刪除這些元素。
注:—multiset的所有其他屬性與該集合相同,不同之處在於
它允許存儲相同的多個值。
顯示multiset實現的c++程序。
#include using namespace STD;Int main(){//聲明multiset。Multiset < int > ms;//添加到multiset的元素。ms。插入(14);ms。插入(10);ms。插入(20); ms . insert ( 5 ) ; ms . insert ( 14 ) ; // duplicate element added . ms . insert ( 25 ) ; ms . insert ( 25 ) ; // duplicate element added . ms . insert ( 29 ) ; // declaring iterators to traverse the mutiset. multiset < int > :: iterator it1 , it2 , it3 ; cout << “ elements of multiset are : \n” ; for ( it1 = ms.begin() ; it1 != ms.end() ; it1++) { cout << *it1 << “ “ ; } it2 = ms.find ( 10 ) ; it2 = ms.find ( 25 ) ; // removing the elements of multiset from 10 to 25 (exclusive) . ms.erase ( it1 , it2 ) ; cout << “ elements of multiset after removing the elements : \n ” ; for ( it1 = ms.begin() ; it1 != ms.end() ; it1++ ) { cout<< *it1 << “ “ ; } return 0 ; }
輸出:
multiset的元素有:
5 10 14 14 20 25 25 29
去掉元素後的multiset元素:
5 25 25 29
結論:Multiset允許存儲重複的值,而set不允許。
Unordered_Set:
- Unordered_set可以按任意順序存儲元素,不需要指定存儲元素的順序。這通常取決於您正在使用的機器。
- 存儲唯一元素,不允許重複。
- Unordered_set使用哈希表來存儲元素。
注意:所有其他屬性與集合的屬性相同。
顯示set實現的c++程序。
#include using namespace std;Int main(){//聲明unordered_set。Unordered_set < int > us;//向unordered_set添加元素。我們。插入(14);我們。插入(10);我們。插入(20); us . insert ( 14 ) ; // duplicates added . us . insert ( 12) ; us . insert ( 8 ) ; unordered_set < int > :: iterator it1 , it2 ; cout << “ elements of unordered_set are \n “ ; for ( it1 = us.begin() ; it1 != us.end() ; it1++ ) { cout << *it1 << ” “ ; } // erasing element 14 it2 = us.find ( 14 ) ; us.erase( it2 ) ; cout<< “ elements of unordered_set after erasing the element : \n ” ; for( it1 = us.begin() ; it1 != us.end() ; it1++ ) { cout << *it1 << “ “ ; } return 0; }
輸出:
unordered_set的元素有:
14 10 20 12 8
刪除元素後unordered_set的元素:
10 20 12 8
注意:-不要與任何人比較通過打印unordered_set產生的輸出順序,因為根據機器的不同,每個人的輸出順序都可能不同。
c++中的setprecision是什麼?
c++提供了一係列用於格式化數據類型的操縱符。c++中的setprecision就是這樣的操縱符之一。它在輸出屏幕上設置十進製數的浮點精度。有時可能會將setprecision函數與c++中的其他set操作或函數混淆,但它們是完全不同的。c++允許我們設置小數點後幾位,如下節所述。
如何在c++中設置小數點?
我們使用setprecision()方法來設置浮點數的精度。換句話說,該方法使我們能夠決定要顯示的數字總數,從而限製要顯示的小數點後數字的數量。下麵給出了語法和示例。
語法:
設置精度(n)
在這裏,參數' n '是在浮點字麵值的情況下要在輸出屏幕上顯示的有效數字的數目。
例子:
#include #include < ioomanip >使用命名空間std;Int main() {float a = 5.912346;//初始化浮點變量cout << "實際數值為:" << a<< endl;cout << " 4位有效數字為:";Cout << setprecision(4) <
輸出
實際數字是:5.91235
有四位有效數字的數是:5.912
結論
簡單來說就是Set是一個STL容器,存儲排序(升序或降序)和唯一的元素在裏麵嗎.多重集還存儲元素,但它也可以存儲重複的值.Unordered_Set商店元素以任何方式,但它不存儲相同的值。
這篇關於c++中Set概念的博文就到此結束了。我們希望你覺得這是全麵的和有幫助的,並能夠獲得所需的知識。如果你想提高技能,學習更多這樣的概念,你可以看看Great Learning Academy上的免費在線課程吧beplay2018官网和在線軟件工程課程.
此外,如果你正在準備麵試,看看這些c++麵試問題像專業選手一樣拿高分。