这个定义在OuterClass
里面:
struct Compare
{
bool operator ()(const T&, const T&);
};
typedef set<T, Compare> MySet;
我的问题是比较函数
operator ()
取决于OuterClass
的状态。 (MySet
实例在优化算法中使用,它们在不同阶段必须进行不同的排序。)有什么方法/解决方案可以从比较函数
OuterClass
中访问operator ()
的非静态成员吗? 最佳答案
有。只需为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
}
但是要当心:订购标准应保持稳定。对于同一集合,元素必须始终比较相同。根据C++ 11标准的23.2.4/3段:
关于C++ STL设置: Compare object with extrinsic state,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16261441/