gpt4 book ai didi

c++ - MAP C++ 使用 itr.first->second VS itr->second

转载 作者:行者123 更新时间:2023-12-02 09:55:16 28 4
gpt4 key购买 nike

http://www.cplusplus.com/reference/map/map/insert/ ,我对做 ret.first->second 的推理感到困惑或 it->second访问第二个值。为什么有必要做 .first->second如果你可以用 ->second ?

// map::insert (C++98)
#include <iostream>
#include <map>

int main ()
{
std::map<char,int> mymap;
std::pair<std::map<char,int>::iterator,bool> ret;
ret = mymap.insert ( std::pair<char,int>('z',500) );
if (ret.second==false) {
std::cout << "element 'z' already existed";
std::cout << " with a value of " << ret.first->second << '\n';
}

// showing contents:
std::cout << "mymap contains:\n";
for (std::map<char,int>::iterator it=mymap.begin(); it!=mymap.end(); ++it)
std::cout << it->first << " => " << it->second << '\n';

return 0;
}

最佳答案

每个std::map元素存储为 std::pair包含其键和值(分别在该对的 firstsecond 字段中)。

std::map::insert() 方法返回 std::pair 包含:

  • 一个 std::map::iterator指向std::map正在插入的键的元素。
  • 一个 bool指示该元素是新插入的还是已存在于 std::map 中.

  • 当代码调用 ret = mymap.insert(...); , ret.firstiteratorret.secondbool .

    取消引用 std::map::iterator访问键/值 std::pair迭代器指向的元素。

    因此,由于 ret.firststd::map::iterator ,然后 ret.first->first是元素的键和 ret.first->second是元素的值。

    在随后的循环中, for (it=mymap.begin(); it!=mymap.end(); ++it) , it也是 std::map::iterator , 指向 std::map 的不同元素在每次循环迭代中。因此,当取消引用该迭代器时, it->first是元素的键和 it->second是元素的值。

    关于c++ - MAP C++ 使用 itr.first->second VS itr->second,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60766336/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com