打印存储在Iterator中的内容失败

Failed to print what is stored in Iterator

本文关键字:失败 存储 Iterator 打印      更新时间:2023-10-16
// unordered_map::find
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;
int main ()
{
  std::unordered_map<std::string,double> mymap;
  mymap["mom"] = 5.4;
  mymap["dad"] = 6.1;
  mymap["bro"] = 5.9;
  std::string input;
  std::cout << "who? ";
  getline (std::cin,input);
  std::unordered_map<std::string,double>::const_iterator got = mymap.find (input);
**cout << mymap.find(input) <<endl;
cout << got <<endl;
cout << mymap.end() <<endl;**

  if ( got == mymap.end() )
    std::cout << "not found";
  else
    std::cout << got->first << " is " << got->second;
  std::cout << std::endl;
  return 0;
}

为什么当我试图打印迭代器时得到,和mymap。Find和mymap。结束时将会发生错误。为什么我不能把它们打印出来,这样我就可以知道它们实际上会返回什么或者交互器中会保存什么?

错误:

错误1错误C2679:二进制'<<':没有找到带a的操作符类型'std::_List_iterator<_Mylist>'的右操作数(或者存在)不可以接受的c:userschunhaunc++lessonsself-learningself-learningassociative_container.cpp 19

6智能感知:没有操作符"<<"匹配这些操作数c:userschunhaunc++lessonsself-learningself-learningassociative_container.cpp 21

不能打印迭代器,因为没有函数将迭代器的内容打印到std::ostream。同样的cout<<mymap.find<<endl;,它试图写函数指针,我相信。您需要做的是创建一个像这样的函数。

IMPORTANT:我所展示的操作符重载函数在尝试打印无效迭代器时会抛出异常。这只是为了演示如何解决"现实世界"问题的错误。显示迭代器内容的正确方法是您在程序末尾所做的。

因为您要打印的不是存储在迭代器中的内容,而是迭代器本身。没有定义operator<<来打印各种迭代器-它们会打印什么?如果你愿意,你可以自己定义一个:

std::ostream& operator<<
(std::ostream& out, const std::unordered_map<std::string, double>::const_iterator& iter)
{
    typedef std::unordered_map<std::string, double>::const_iterator c_iterator;
    out << it->first << " with " << it->second << "n"
    return out;
}

是的,当你正在打印迭代器时,它将不起作用。您可以通过首先打印出您创建的映射的键/值对来进行一些调试。也有可能您输入的键值不在映射中。您可以通过显示输入来验证这一点。这样,您将能够更容易地调试它。要获取用户输入,只需使用

cin >> input;