sch*_*ttl 5 c++ stl compare set
这个定义在以下内容中OuterClass:
struct Compare
{
bool operator ()(const T&, const T&);
};
typedef set<T, Compare> MySet;
Run Code Online (Sandbox Code Playgroud)
我的问题是比较函数operator ()取决于状态OuterClass.(MySet在算法期间使用实例进行优化,并且它们必须在不同阶段进行不同的排序.)
有什么方法/解决方法可以OuterClass从比较函数中访问非静态成员operator ()吗?
有没有办法/解决方法从比较函数operator()中访问OuterClass的非静态成员?
有.只需编写一个用户定义的构造函数Compare,接受并存储引用OuterClass,这样:
struct Compare
{
Compare(OuterClass& o) : oc(o) { }
bool operator ()(const T&, const T&)
{
// Uses oc somehow...
}
private:
OuterClass& oc;
};
Run Code Online (Sandbox Code Playgroud)
然后,当您创建集合时,您可以执行以下操作:
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
}
Run Code Online (Sandbox Code Playgroud)
但请注意:订购标准应保持稳定.元素必须始终对同一组进行比较.根据C++ 11标准的第23.2.4/3段:
短语"等价键"是指比较而不是
operator==开键所施加的等价关系 .即,两个键k1和k2被认为是等价的,如果为比较对象comp,comp(k1, k2) == false && comp(k2, k1) == false.对于同一容器中的任意两个键k1和k2,调用comp(k1, k2)应始终返回相同的值.
| 归档时间: |
|
| 查看次数: |
1001 次 |
| 最近记录: |