C++ set用法總結(整理)


set簡介

順序容器包括vector、deque、list、forward_list、array、string,所有順序容器都提供了快速順序訪問元素的能力。

 

關聯容器包括set、map

 

關聯容器和順序容器有着根本的不同:關聯容器中的元素是按關鍵字來保存和訪問的。與之相對,順序容器中的元素是按它們在容器中的位置來順序保存和訪問的。

 

關聯容器不支持順序容器的位置相關的操作。原因是關聯容器中元素是根據關鍵字存儲的,這些操作對關聯容器沒有意義。而且,關聯容器也不支持構造函數或插入操作這些接受一個元素值和一個數量值得操作。

 

關聯容器支持高效的關鍵字查找和訪問。兩個主要的關聯容器(associative container)類型是map和set。map中的元素是一些關鍵字----值(key--value)對:關鍵字起到索引的作用,值則表示與索引相關聯的數據。set中每個元素只包含一個關鍵字:set支持高效的關鍵字查詢操作----檢查一個給定關鍵字是否在set中。

 

標准庫提供set關聯容器分為:

 

  1,按關鍵字有序保存元素:set(關鍵字即值,即只保存關鍵字的容器);multiset(關鍵字可重復出現的set);

 

  2,無序集合:unordered_set(用哈希函數組織的set);unordered_multiset(哈希組織的set,關鍵字可以重復出現)。

 

set就是關鍵字的簡單集合。當只是想知道一個值是否存在時,set是最有用的。

 

在set中每個元素的值都唯一,而且系統能根據元素的值自動進行排序。set中元素的值不能直接被改變。set內部采用的是一種非常高效的平衡檢索二叉樹:紅黑樹,也稱為RB樹(Red-Black Tree)。RB樹的統計性能要好於一般平衡二叉樹。

 

set具備的兩個特點:

 

  set中的元素都是排序好的

  set中的元素都是唯一的,沒有重復的

set用法:

begin();            // 返回指向第一個元素的迭代器
end();              // 返回指向最后一個元素的迭代器
clear();            // 清除所有元素
count();            // 返回某個值元素的個數
 empty(); // 如果集合為空,返回true
 equal_range(); //返回集合中與給定值相等的上下限的兩個迭代器
 erase()–刪除集合中的元素 find()–返回一個指向被查找到元素的迭代器 get_allocator()–返回集合的分配器 insert()–在集合中插入元素 lower_bound()–返回指向大於(或等於)某值的第一個元素的迭代器 key_comp()–返回一個用於元素間值比較的函數 max_size()–返回集合能容納的元素的最大限值 rbegin()–返回指向集合中最后一個元素的反向迭代器 rend()–返回指向集合中第一個元素的反向迭代器 size()–集合中元素的數目 swap()–交換兩個集合變量 upper_bound()–返回大於某個值元素的迭代器 value_comp()–返回一個用於比較元素間的值的函數

 

begin() and end()

// set::begin/end
#include <iostream> #include <set>
 
int main () { int myints[] = {75,23,65,42,13}; std::set<int> myset (myints, myints+5); std::cout << "myset contains:"; for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it) std::cout << ' ' << *it; std::cout << '\n'; return 0; } Output: myset contains: 13 23 42 65 75

 

順序容器包括vector、deque、list、forward_list、array、string,所有順序容器都提供了快速順序訪問元素的能力。
關聯容器包括set、map
關聯容器和順序容器有着根本的不同:關聯容器中的元素是按關鍵字來保存和訪問的。與之相對,順序容器中的元素是按它們在容器中的位置來順序保存和訪問的。
關聯容器不支持順序容器的位置相關的操作。原因是關聯容器中元素是根據關鍵字存儲的,這些操作對關聯容器沒有意義。而且,關聯容器也不支持構造函數或插入操作這些接受一個元素值和一個數量值得操作。
關聯容器支持高效的關鍵字查找和訪問。兩個主要的關聯容器(associative container)類型是map和set。map中的元素是一些關鍵字----值(key--value)對:關鍵字起到索引的作用,值則表示與索引相關聯的數據。set中每個元素只包含一個關鍵字:set支持高效的關鍵字查詢操作----檢查一個給定關鍵字是否在set中。
標准庫提供set關聯容器分為:
1,按關鍵字有序保存元素:set(關鍵字即值,即只保存關鍵字的容器);multiset(關鍵字可重復出現的set);
2,無序集合:unordered_set(用哈希函數組織的set);unordered_multiset(哈希組織的set,關鍵字可以重復出現)。
set就是關鍵字的簡單集合。當只是想知道一個值是否存在時,set是最有用的。
在set中每個元素的值都唯一,而且系統能根據元素的值自動進行排序。set中元素的值不能直接被改變。set內部采用的是一種非常高效的平衡檢索二叉樹:紅黑樹,也稱為RB樹(Red-Black Tree)。RB樹的統計性能要好於一般平衡二叉樹。
set具備的兩個特點:
set中的元素都是排序好的set中的元素都是唯一的,沒有重復的set用法:
begin();            // 返回指向第一個元素的迭代器end();              // 返回指向最后一個元素的迭代器clear();            // 清除所有元素count();            // 返回某個值元素的個數 empty();            // 如果集合為空,返回true equal_range();      //返回集合中與給定值相等的上下限的兩個迭代器 erase()–刪除集合中的元素 find()–返回一個指向被查找到元素的迭代器 get_allocator()–返回集合的分配器 insert()–在集合中插入元素 lower_bound()–返回指向大於(或等於)某值的第一個元素的迭代器 key_comp()–返回一個用於元素間值比較的函數 max_size()–返回集合能容納的元素的最大限值 rbegin()–返回指向集合中最后一個元素的反向迭代器 rend()–返回指向集合中第一個元素的反向迭代器 size()–集合中元素的數目 swap()–交換兩個集合變量 upper_bound()–返回大於某個值元素的迭代器 value_comp()–返回一個用於比較元素間的值的函數begin() and end()
// set::begin/end#include <iostream>#include <set> int main (){  int myints[] = {75,23,65,42,13};  std::set<int> myset (myints, myints+5);   std::cout << "myset contains:";  for (std::set<int>::iterator it=myset.begin(); it!=myset.end(); ++it)    std::cout << ' ' << *it;   std::cout << '\n';   return 0;} Output:myset contains: 13 23 42 65 75————————————————版權聲明:本文為CSDN博主「sevencheng798」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。原文鏈接:https://blog.csdn.net/sevenjoin/article/details/81908754


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM