【发布时间】:2016-10-24 01:29:50
【问题描述】:
我正在寻找一个“动态比较器”,它根据运行时参数给出比较结果。
这是一个比较器,根据它们与输入参数 x 的距离来比较两个整数。
struct leq
{
bool operator()(const int a, const int b, const int x) {
return abs(a-x) <= abs(b-x);
}
};
我希望用它来实现下面对一个包含整数2的集合的插入,也就是
mySet = {2}
mySet.insert(3, leq(5)) results: mySet = {3, 2} // argument x of leq is 5 and abs(3-5) < abs(2-5)
mySet.insert(3, leq(1)) results: mySet = {2, 3} // argument x of leq is 1 and abs(3-1) > abs(2-1)
Note: the argument x may change for each element to be inserted into mySet.
有没有办法只使用标准容器集及其成员函数来实现呢?
提前致谢!
【问题讨论】:
-
当你写的时候你的实际问题是什么?
-
x是每个std::set实例的固定值吗?或者你想不时更改x的值? -
你要找的词是“有状态的”。
-
可以为集合中的所有成员指定使用具有相同固定值
x的比较器函数的集合。也就是说,参数是在运行时指定的,但相同的x值用于集合中的所有插入值。这与您展示的伪代码不完全一样,所以我暂缓回答,直到您澄清这是否正是您想要的。请注意,x为 5,“2”和“7”将比较相等,我不清楚这是预期的结果。
标签: c++ set comparator