如何仅在c ++中访问unordered_set的元素?

时间:2018-07-05 09:18:38

标签: c++ c++11 unordered-set

例如,

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

如何从s获得值100?

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

  

请注意,unordered_set对象不能保证将哪个特定元素视为其第一个元素。但是,无论如何,从开始到结束的范围将覆盖容器(或存储桶)中的所有元素,直到无效为止。

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

请澄清。

2 个答案:

答案 0 :(得分:7)

当只有一个元素(100)时,就没有定单问题,因此*begin(s)100

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

答案 1 :(得分:0)

从您提供的链接中,您将看到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)将为您提供存储桶,有些存储桶可以为空,有些存储桶可以包含多个元素。