What does iterator->second mean?

后端 未结 2 2010
[愿得一人]
[愿得一人] 2020-12-22 16:59

In C++, what is the type of a std::map<>::iterator?

We know that an object it of type std::map::iterator has

相关标签:
2条回答
  • 2020-12-22 17:39

    The type of the elements of an std::map (which is also the type of an expression obtained by dereferencing an iterator of that map) whose key is K and value is V is std::pair<const K, V> - the key is const to prevent you from interfering with the internal sorting of map values.

    std::pair<> has two members named first and second (see here), with quite an intuitive meaning. Thus, given an iterator i to a certain map, the expression:

    i->first
    

    Which is equivalent to:

    (*i).first
    

    Refers to the first (const) element of the pair object pointed to by the iterator - i.e. it refers to a key in the map. Instead, the expression:

    i->second
    

    Which is equivalent to:

    (*i).second
    

    Refers to the second element of the pair - i.e. to the corresponding value in the map.

    0 讨论(0)
  • 2020-12-22 17:52

    I'm sure you know that a std::vector<X> stores a whole bunch of X objects, right? But if you have a std::map<X, Y>, what it actually stores is a whole bunch of std::pair<const X, Y>s. That's exactly what a map is - it pairs together the keys and the associated values.

    When you iterate over a std::map, you're iterating over all of these std::pairs. When you dereference one of these iterators, you get a std::pair containing the key and its associated value.

    std::map<std::string, int> m = /* fill it */;
    auto it = m.begin();
    

    Here, if you now do *it, you will get the the std::pair for the first element in the map.

    Now the type std::pair gives you access to its elements through two members: first and second. So if you have a std::pair<X, Y> called p, p.first is an X object and p.second is a Y object.

    So now you know that dereferencing a std::map iterator gives you a std::pair, you can then access its elements with first and second. For example, (*it).first will give you the key and (*it).second will give you the value. These are equivalent to it->first and it->second.

    0 讨论(0)
提交回复
热议问题