C++11標準引入了無序關聯容器(Unordered Associative Containers),這些容器基于哈希表實現,提供了平均常數時間復雜度的插入、刪除和查找操作。與有序關聯容器(如std::map
和std::set
)不同,無序關聯容器不維護元素的順序,而是通過哈希函數將元素映射到桶中。C++11標準中定義了四種無序關聯容器,分別是std::unordered_set
、std::unordered_multiset
、std::unordered_map
和std::unordered_multimap
。
std::unordered_set
std::unordered_set
是一個無序集合,它存儲唯一的元素。與std::set
不同,std::unordered_set
不保證元素的順序,而是通過哈希函數將元素映射到桶中。std::unordered_set
的主要特點包括:
std::unordered_set
中的元素是唯一的,不允許重復。#include <unordered_set>
#include <iostream>
int main() {
std::unordered_set<int> uset = {1, 2, 3, 4, 5};
uset.insert(6);
uset.erase(3);
for (const auto& elem : uset) {
std::cout << elem << " ";
}
return 0;
}
std::unordered_multiset
std::unordered_multiset
是一個無序多重集合,它允許存儲重復的元素。與std::unordered_set
類似,std::unordered_multiset
也不保證元素的順序,而是通過哈希函數將元素映射到桶中。std::unordered_multiset
的主要特點包括:
std::unordered_multiset
中的元素可以重復。#include <unordered_set>
#include <iostream>
int main() {
std::unordered_multiset<int> umset = {1, 2, 2, 3, 4, 4, 5};
umset.insert(6);
umset.erase(2);
for (const auto& elem : umset) {
std::cout << elem << " ";
}
return 0;
}
std::unordered_map
std::unordered_map
是一個無序映射容器,它存儲鍵值對。與std::map
不同,std::unordered_map
不保證鍵值對的順序,而是通過哈希函數將鍵映射到桶中。std::unordered_map
的主要特點包括:
std::unordered_map
存儲鍵值對,鍵是唯一的。#include <unordered_map>
#include <iostream>
int main() {
std::unordered_map<std::string, int> umap = {{"apple", 1}, {"banana", 2}, {"cherry", 3}};
umap.insert({"date", 4});
umap.erase("banana");
for (const auto& pair : umap) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
std::unordered_multimap
std::unordered_multimap
是一個無序多重映射容器,它允許存儲多個具有相同鍵的鍵值對。與std::unordered_map
類似,std::unordered_multimap
也不保證鍵值對的順序,而是通過哈希函數將鍵映射到桶中。std::unordered_multimap
的主要特點包括:
std::unordered_multimap
中的鍵可以重復,允許多個鍵值對具有相同的鍵。#include <unordered_map>
#include <iostream>
int main() {
std::unordered_multimap<std::string, int> ummap = {{"apple", 1}, {"apple", 2}, {"banana", 3}};
ummap.insert({"banana", 4});
ummap.erase("apple");
for (const auto& pair : ummap) {
std::cout << pair.first << ": " << pair.second << std::endl;
}
return 0;
}
C++11標準引入了四種無序關聯容器:std::unordered_set
、std::unordered_multiset
、std::unordered_map
和std::unordered_multimap
。這些容器基于哈希表實現,提供了平均常數時間復雜度的插入、刪除和查找操作。與有序關聯容器不同,無序關聯容器不維護元素的順序,而是通過哈希函數將元素映射到桶中。根據具體需求,可以選擇合適的無序關聯容器來存儲和操作數據。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。