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标准的提示——我记住了这一点:)非常感谢!