C++ 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