[英]Comparing unordered_map vs unordered_set
首先,它們之間的主要區別是什么?
我發現的唯一一件事是unordered_set
沒有 operator []
。 我應該如何訪問unordered_set
的元素,因為沒有[]
?
哪個容器使用隨機訪問內存(或兩者)?
哪一個在任何意義上都更快或使用更少的內存?
它們幾乎相同。 unordered_set
只包含鍵,沒有值。 沒有從鍵到值的映射,因此不需要operator[]
。 unordered_map
將鍵映射到值。
您可以使用unordered_set
的各種find
方法來定位事物。
您可以使用迭代器訪問元素。
unordered_set <string> u{
"Dog",
"Cat",
"Rat",
"Parrot",
"bee"
};
for(auto& s:u){
cout << s << ' ';
}
unordered_set<string>::const_iterator point = u.find("bee");
我應該如何訪問 unordered_set (C++17) 中的元素?
在 C++ 17 中,一個新的函數extract
被添加到unordered_set
。 特別是,這是從集合中取出僅移動對象的唯一方法。
https://en.cppreference.com/w/cpp/container/unordered_set/extract
例如,如果您想要無序集合的第三個元素。 推進迭代器
std::advance(it,2);
然后提取值
s.extract(it).value();
這是完整的代碼。 嘗試任何 C++17 編譯器。
#include <iostream>
#include <string>
#include <unordered_set>
#include <iterator>
int main()
{
//CREATE AN OBJECT
std::unordered_set<std::string> s;
//INSERT DATA
s.insert("aee");
s.insert("bee");
s.insert("cee");
s.insert("dee");
//NEED TO INCLUDE "iterator" HEADER TO USE "std::advance"
auto it = s.begin();
std::advance(it,2);
//USING EXTRACT
std::string sval = s.extract(it).value();
std::cout<<sval;
}
注意:如果查詢越界索引,則什么也不會發生。 沒有結果。 嘗試更改您的代碼
//ONLY FOUR ELEMENTS
std::advance(it,8);
//USING EXTRACT
std::string sval = s.extract(it).value();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.