set和unordered set區別以及適用情況

2021-09-29 09:33:15 字數 764 閱讀 6139

何時使用set:

我們需要有序的資料。

我們將不得不列印/訪問資料(按排序順序)。

我們需要元素的前任/後繼。

由於set是有序的,因此我們可以在set元素上使用binary_search(),lower_bound()和upper_bound()之類的函式。這些函式不能在unordered_set()上使用。

在以下情況下使用unordered_set

我們需要保留一組不同的元素,並且不需要排序。

我們需要單元素訪問,即無遍歷。

另外,這幾個方面

search

insert

delete

bst的時間複雜度都是o(logn),但是雜湊表可以達到o(1),似乎在常見操作中我們都可以使用雜湊表,那麼什麼時候用bst呢?

這裡有幾個點很重要:

只需執行bst的有序遍歷,就可以按排序順序獲得所有鍵。這不是雜湊表中的常規操作,需要額外的方法。

這樣做為了統計,查詢最接近更低和更高的元素,bst做範圍查詢是容易做到。像排序一樣,這些操作對於雜湊表也不是常規的操作。

與雜湊相比,bst易於實現,我們可以輕鬆實現自己的自定義bst。為了實現雜湊,我們通常依賴於程式語言提供的庫。

使用自平衡bst,可以保證所有操作都可以在o(logn)時間內進行。但是使用雜湊時,θ(1)是平均時間,某些特定操作可能會很昂貴,尤其是在調整表大小時。

set和setenv的區別

這裡討論的是tcsh中變數及環境變數時set和setenv命令的區別 set語法set name value setenv語法setenv name value 最大的區別是,set變數只對當前程序有效,不會傳遞給子程序 setenv變數不僅對當前程序有效,而且會傳遞給子程序 而當同時使用set和s...

list和set的區別

集合list作為佇列來使用,先存入的資料會被先取出 listlist new arraylist list.add 1 list.add 2 list.add 3 取出來的結果為 1,2,3 集合set作為堆疊來使用,先存入的資料會後取出 setset new hashset set.add 1 s...

集合中List和Set

collection介面有兩個子介面 list 列表 set 集 list 可存放重複元素,元素訪問是有序的。set 不可以存放重複元素,元素訪問是無序 的list集合中常用的類 vector 執行緒安全,但速度慢,已被 arraylist 替代。arraylist 執行緒不安全,查詢速度快。lin...