C unordered系列的關聯式容器

2021-10-02 16:19:49 字數 3927 閱讀 8162

1、unordered系列的關聯式容器

(1)unordered_map是儲存鍵值對的關聯式容器,其允許通過key快速的索引到與其對應的value。

(2)在unordered_map中,鍵值通常用於唯一地標識元素,而對映值是乙個物件,其內容與此鍵關聯。鍵和對映值的型別可能不同。

(3)在內部,unordered_map沒有對按照任何特定的順序排序,為了能在常數範圍內找到key所對應的value,unordered_map將相同雜湊值的鍵值對放在相同的桶中。

(4)unordered_map容器通過key訪問單個元素要比map快,但它通常在遍歷元素子集的範圍迭代方面效率較低。

(5)unordered_maps實現了直接訪問操作符(operator),它允許使用key作為引數直接訪問value。

(6)它的迭代器至少是前向迭代器。

#include

#include

#include

using

namespace std;

intmain()

cout

int i =

0; i < um.

bucket_count()

;++i)

return0;

}

#include

#include

#include

using

namespace std;

intmain()

for(

int i =

0; i < umm.

bucket_count()

;++i)

return0;

}

(1)unordered_set是不按特定順序儲存唯一元素的容器,允許根據元素的值快速檢索單個元素。

(2)在unordered_set中,元素的值同時是其唯一標識元素的鍵。鍵是不可變的,因此,unordered_set中的元素不能在容器中修改一次,但是可以插入和刪除它們。

(3)在內部,unordered_set中的元素不按任何特定順序排序,而是根據它們的雜湊值組織成桶,以允許直接由它們的值快速訪問單個元素(平均平均時間複雜度恆定)。

(4)unordered_set容器比set容器通過其鍵訪問單個元素的速度快,儘管它們在通過其元素子集進行範圍迭代時通常效率較低。

(5)容器中的迭代器至少是正向迭代器。

#include

#include

#include

using

namespace std;

intmain()

for(

int i =

0; i < us.

bucket_count()

;++i)

cout

int> usi;

usi.

insert(2

);usi.

insert(4

);usi.

insert(2

);usi.

insert(3

);usi.

insert(2

);usi.

insert(1

);for(

auto

& e : usi)

for(

int i =

0; i < usi.

bucket_count()

;++i)

return0;

}

#include

#include

#include

using

namespace std;

intmain()

for(

int i =

0; i < ums.

bucket_count()

;++i)

return0;

}

2、應用

在大小為 2n 的陣列 a 中有 n+1 個不同的元素,其中有乙個元素重複了 n 次。返回重複了 n 次的那個元素。

#include

#include

#include

using

namespace std;

class

solution

for(

auto

& e : a)}}

};intmain()

; cout

(a)

}

給定兩個陣列,編寫乙個函式來計算它們的交集。

#include

#include

#include

using

namespace std;

class

solution

unordered_set<

int> us2;

for(

auto

& e : v2)

for(

auto

& e : us1)

}return ret;}}

;int

main()

; vector<

int> v2

; vector<

int> res = sol.

intersection

(v1, v2)

;for

(auto

& e : res)

return0;

}

給定乙個整數陣列,判斷是否存在重複元素。

#include

#include

#include

using

namespace std;

class

solution

for(

int i =

0; i < us.

bucket_count()

;++i)

}return

false;}

};intmain()

; vector<

int> v2

; cout

(v1)

(v2)

}

給定兩個句子 a 和 b 。 (句子是一串由空格分隔的單詞。每個單詞僅由小寫字母組成。)如果乙個單詞在其中乙個句子中只出現一次,在另乙個句子中卻沒有出現,那麼這個單詞就是不常見的。

#include

#include

#include

#include

using

namespace std;

class

solution

for(

auto

& e : vb)

for(

auto

& e : umsa)

}for

(auto

& e : umsb)

}return ret;

}private

: vector

splitstringtowords

(string str)

else}}

return ret;}}

;int

main()

return0;

}

STL系列 關聯容器的操作

在c 中定義了幾種型別用來表示容器關鍵字和值的型別。對於set,由於儲存的值就是關鍵字,所以,key type和value type是一樣的。set的迭代器是const的!對於set,find呼叫返回的是乙個迭代器,如果我們所給定的關鍵字在set中的時候,迭代器就指向該關鍵字,否則,find返回尾後...

undordered系列關聯式容器

unordered系列容器是c 11中,新增加的4個關聯式容器,這四個關聯式容器與紅黑樹結構的關聯式容器使用方式基本相同,只是在底層實現的結構不同。unordered map 1.unordered map是儲存鍵值對的關聯式容器,其允許通過key快速的索引到對應的value。2.在unordere...

STL系列 7 關聯容器特點

set,multiset,map,multimap 是一種非線性的樹結構,具體的說採用的是一種比較高效的特殊的平衡檢索二叉樹 紅黑樹結構。因為關聯容器的這四種容器類都使用同一原理,所以他們核心的演算法是一致的,但是它們在應用上又有一些差別,先描述一下它們之間的差別。set 又稱集合,實際上就是一組元...