按域名瀏覽

設置在c++ -一個完整的參考

c++有很多有用的元素和工具來幫助我們進行有競爭力的編程。其中一個組件是標準模板庫(Standard Template Library, STL)中的集合,它提供了一種有效地以排序方式存儲數據的方法。這篇c++中的set指南涵蓋了你需要知道的關於set的所有要點。

集合是c++ STL中用於按給定順序存儲元素的容器。集合的元素必須是唯一的。值本身可以標識集合中的每個元素,也就是說,它們本身充當鍵。在c++中,可以向set中插入元素或從set中刪除元素,但不能對其進行修改,因為一旦存儲在set中,這些值就變成了常量。隨著本文的閱讀,您將對c++中的集合有更多的了解,從c++中的集合開始,一直到Interlinks。

c++中的Set是什麼?

如上所述,c++中的集合是STL容器的類型,用於以排序的方式存儲元素。允許對集合執行的操作包括插入和刪除。在set類型容器中,元素按照嚴格的弱排序進行內部排序。由於容器中的元素是常量,因此不能操作或操作集合中現有元素的值。集合中的元素通過惟一地標識它而充當其自身的鍵。因此,集合隻允許保存唯一的值。

為了在c++中遍曆集合,我們使用了迭代器。是c++中使用集合必須包含的兩個頭文件。這兩個頭文件的另一個替代文件是。集合的內部實現是使用二叉搜索樹(bst)完成的。

什麼時候使用集合?

集合是競爭性編程中經常使用的容器;每當需要以排序的方式存儲元素時,可以考慮使用集合,但請記住,集合不允許存儲重複的值。該值一旦存儲,就不能修改。

實現集

  • 使用迭代器遍曆集合。
  • 我們必須包含兩個主要的頭文件來處理集合。

#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++中可以對集合執行各種各樣的操作。讓我們看一些重要的集合方法。

  1. 開始()此方法返回一個指向集合中第一個元素的迭代器。
  2. 結束()函數返回一個迭代器,該迭代器指向集合中最後一個元素旁邊的理論位置。
  3. 空():用於檢查集合是否為空。
  4. 尺寸():此函數給出集合中存在的元素個數。
  5. max_size ()此方法返回集合中元素的上界,即集合可以容納的最大數量。
  6. rbegin ():與begin()方法相反,此方法返回指向集合最後一個元素的反向迭代器。
  7. 撕裂():與begin()方法相反,此方法返回一個反向迭代器,指向集合中最後一個元素之前的邏輯位置。
  8. 擦除(迭代器_位置):此方法應用於set對象時,移除形參中給出的指針所指向位置的元素。
  9. 擦除(const_n):該函數直接從set中刪除形參傳遞的值n。
  10. 插入(const_n)函數將一個新元素' n '插入到集合中。
  11. Find (n):此方法在集合中搜索元素' n ',並返回一個指向所找到元素位置的迭代器。如果未找到該元素,則返回指向末尾的迭代器。
  12. Count (const_n)這個set方法檢查傳遞的值' n '是否存在,如果找到或未找到元素,則分別返回0或1。
  13. 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++麵試問題像專業選手一樣拿高分。


《阿凡達》的照片
beplay2018官网優秀的學習團隊
beplay2018官网偉大學習的博客涵蓋了技術的最新發展和創新,可以用來建立有回報的職業。你可以在這裏找到職業指南、技術教程和行業新聞,讓自己跟上快速變化的科技和商業世界。

請留下評論

您的電子郵件地址將不會被公布。必填項被標記*

找到理想的工作免費的印度最值得信賴的教育平台的證書課程

滾動到頂部
Baidu
map