まず、それらの主な違いは何ですか?
私が見つけた唯一のことは、unordered_set
に演算子[]
がないことです。 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
たとえば、順序なしセットの3番目の要素が必要な場合などです。イテレータを進める
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();