Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;STL集合:将对象与外部状态进行比较_C++_Stl_Compare_Set - Fatal编程技术网

C++ C++;STL集合:将对象与外部状态进行比较

C++ C++;STL集合:将对象与外部状态进行比较,c++,stl,compare,set,C++,Stl,Compare,Set,此定义位于外部类的内部: struct Compare { bool operator ()(const T&, const T&); }; typedef set<T, Compare> MySet; 结构比较 { 布尔运算符()(常数T&,常数T&); }; 打字机; 我的问题是比较函数操作符()取决于OuterClass的状态。(MySet实例在优化算法期间使用,它们必须在不同阶段进行不同排序。) 是否有任何方法/解决方法可以从比较函数操作符()中访

此定义位于
外部类的内部

struct Compare
{
    bool operator ()(const T&, const T&);
};
typedef set<T, Compare> MySet;
结构比较 { 布尔运算符()(常数T&,常数T&); }; 打字机; 我的问题是比较函数
操作符()
取决于
OuterClass
的状态。(
MySet
实例在优化算法期间使用,它们必须在不同阶段进行不同排序。)

是否有任何方法/解决方法可以从比较函数
操作符()
中访问
外部类的非静态成员

是否有任何方法/解决方法可以从compare函数操作符()中访问OuterClass的非静态成员

有。只需为
Compare
编写一个用户定义的构造函数,它接受并存储对
OuterClass
的引用,方法如下:

struct Compare
{
    Compare(OuterClass& o) : oc(o) { }
    bool operator ()(const T&, const T&)
    {
        // Uses oc somehow...
    }
private:
    OuterClass& oc;
};
然后,在创建集合时,可以执行以下操作:

int main()
{
    typedef std::set<T, Compare> MySet;

    OuterClass oc; // <== Construct an object of type Outerclass somehow...

    MySet ms(Compare(oc)); // <== Construct your comparator and pass it
                           //     in input to the constructor of std::set
}
intmain()
{
typedef std::set MySet;

OuterClass oc;//啊,我忘了看集合构造函数,所以我没有意识到我可以自己创建comparator对象。感谢关于C++11标准的提示——我记住了这一点:)非常感谢!