如何实现map<int,列表<string>>迭代器C++?

How to implement a map<int, list<string> > iterator C++?

本文关键字:gt lt string 列表 何实现 迭代器 C++ int map 实现      更新时间:2023-10-16

这是以前考试的习题,我不知道怎么做。

我有一个叫做dictionary的类,我想通过对数字(the_map_key %2 == 0)的键实现一个迭代器,我不知道如何实现operator++,函数开始结束。代码如下:

class Dictionary{
  private:
     map<int,list<string> > information;

这是练习给我的,下一个是我已经完成的,但我不知道如何继续,当然我应该做一个构造函数和一个析构函数,但这很简单,我在操作符++中遇到了困难,函数开始结束。

  public:
     class iterator{
       private:
          *d;
       public:
          int & operator *()const;{return *d};
          iterator & operator++(){};
          iterator begin(){};
          iterator end(){};

例如,如果信息包含{1,something},{2,anything},{5,other}{6,an},迭代器information.begin()应该指向{2,anything}, iterator++应该指向{6,an}。

你的迭代器类不应该包含指针,它应该包含map<int,list<string> >::iterator。您的operator*是微不足道的-只是向前-但由于您显然想隐藏一些密钥,您的Dictionary::iterator::operator++不能简单地转发到map<int,list<string> >::iterator。我不太明白你想用这些钥匙做什么,所以我把这些细节留给你。

在尝试解决问题后,我写了代码,我问我的教授,如果它是正确的,他告诉我这是好的,所以这里是我想做的代码:

class Dictionary{
private:
  map<int,list<string> > datos;
public:
  class iterator{
     private:
        map<int,list<string> >::iterator p;
     public:
        int & operator *()const{
            return *p;
        };
        iterator & operator++(){
            while(*p->first %2 != 0 || p != datos.end()){
            p++;
          }
          return p;
        };
        iterator begin(){
            p= datos.begin();
          while(*p->first %2 != 0){
                p++;
            }
            return p;
        };
        iterator end(){
          p= datos.end();
          return p;
        };
  };
}

谢谢,你给我的答案或多或少帮助我把事情做好。