首先,它们之间的主要区别是什么?
我发现唯一的区别是unordered_set
没有运算符[]
。既然没有[]
,那么我该如何访问unordered_set
中的元素呢?
哪个容器使用随机访问内存(或两者都使用)?
它们中哪一个在任何方面更快或使用更少的内存?
首先,它们之间的主要区别是什么?
我发现唯一的区别是unordered_set
没有运算符[]
。既然没有[]
,那么我该如何访问unordered_set
中的元素呢?
哪个容器使用随机访问内存(或两者都使用)?
它们中哪一个在任何方面更快或使用更少的内存?
它们几乎相同。 unordered_set
仅包含键(key),没有值(value)。没有从键到值的映射,因此不需要使用 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();
std::unordered_set<std::string> s{"aee", "bee", "cee", "dee"};
)更简洁地完成。此外,还有std::next(it, 2)
。 - L. F.