代码之家  ›  专栏  ›  技术社区  ›  Joan Pastor

C++基于参数更改设置的默认顺序

  •  0
  • Joan Pastor  · 技术社区  · 7 年前

    我试图修改一个函子以接受一个参数,这样就可以根据该参数对一个集进行排序。我就是想不出来

    struct sortset {
      bool operator() (const string& s1, const string& s2) const {
        //Sorting algorithm depending on "sortingVar"
      }
    };
    
    main() {
      string sortingVar; cin >> sortingVar;
      set<string, sortset> mySet;
      ...
    }
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Lightness Races in Orbit    7 年前

    为比较器指定一个构造函数,该构造函数接受参数以确定比较器的行为:

    struct sortset
    {
      sortset(const string& sortingVar) : sortingVar(sortingVar) {}
    
      bool operator() (const string& s1, const string& s2) const {
        //Sorting algorithm based on "sortingVar"
      }
    private:
      const string sortingVar;
    };
    
    int main() {
      string sortingVar; cin >> sortingVar;
    
      // Either:
      set<string, sortset> mySet{sortset{sortingVar}};
    
      // Or:
      sortset comp{sortingVar};
      set<string, sortset> mySet{comp};
    
      // ...
    }
    

    请注意 the set constructor 允许您提供比较器的实际实例,以便您可以使用该实例来传递一个未默认构造的实例(这也是一件好事,因为现在不可能存在这样的实例)。

    添加一些 std::move 如果你愿意的话。

    别忘了付出 main 返回类型。