在声明指向类实例的STL指针集时遇到了一些麻烦。更具体地说,我有这种情况:

class SimulatedDiskFile {
  private:
    // ...
  public:
    // ...
    struct comparator {
      bool operator () (SimulatedDiskFile* const& file_1, SimulatedDiskFile* const& file_2) {
        return ((*file_1)->getFileName() < (*file_2)->getFileName());
      }
    };
}

typedef set<SimulatedDiskFile*, SimulatedDiskFile::comparator> FileSet;

上面的代码不起作用。编译器说它找不到成员SimulatedDiskFile::comparator()函数。如果我将函数带有此声明(在struct之外),则编译器会说它正在期望类型。

现在,我的疑惑到此了(我想不仅是这样,而且是相关的):
  • 一组指针的正确声明是什么?
  • 比较指针的比较函数的正确声明是什么?

  • 在发布之前,我确实在很多地方进行过查询,但是我发现这些引用信息令人困惑,并且与我的特殊情况无关(我认为这很琐碎-实际上,也许是原因)。因此,任何良好的链接也有很大的帮助!

    提前致谢!

    最佳答案

    解决一些小故障,

    #include <set>
    
    class SimulatedDiskFile {
      public:
        int getFileName() { return 23; }
    
        struct comparator {
          bool operator () (SimulatedDiskFile* file_1, SimulatedDiskFile* file_2) {
            return (file_1->getFileName() < file_2->getFileName());
          }
        };
    };
    
    typedef std::set<SimulatedDiskFile*, SimulatedDiskFile::comparator> FileSet;
    

    编译就好了。

    10-01 20:05