如何在 C++ 中只访问 unordered_set 的元素?

how to access only element of unordered_set in c++?

例如,

unordered_set<int> s ;
s.insert(100);

如何从 s 中获取值 100?

来自 http://www.cplusplus.com/reference/unordered_set/unordered_set/begin/

Notice that an unordered_set object makes no guarantees on which specific element is considered its first element. But, in any case, the range that goes from its begin to its end covers all the elements in the container (or the bucket), until invalidated.

所以 s.begin() 不会总是给我值 100?

请说明。

从你给出的 link 中,你会看到 begin() 会给你一个元素。

std::cout << "myset contains:";
for ( auto it = myset.begin(); it != myset.end(); ++it )
    std::cout << " " << *it;
std::cout << std::endl;

output: myset contains: Venus Jupiter Neptune Mercury Earth Uranus Saturn Mars

如您所见,使用 begin() 将为您提供指向集合第一个元素的迭代器,您可以遍历所有元素。

但是,begin(i) 会在同一个例子中给你桶,有些桶可以是空的,有些桶可以包含多个元素。

当你只有一个元素(100)时,你没有顺序问题,所以*begin(s)100

但是,一旦 unordered_set 中有 2 个或更多元素,您就不知道第一个值是哪个 (*begin(s))。