【发布时间】:2014-08-05 09:27:19
【问题描述】:
最近我发现需要计算给定区间之外的元素。
例如,如果我有一个排序向量 { 10, 20, 30 } 和另一个排序向量 { 15, 25 },它们的边界定义了区间。我想数“10”和“30”(范围内只有 20)。为此,我使用 std::vector 和 std::lower_bound,一次向前扫描向量,一次向后扫描。
代码如下:
int t[] = { 15, 25 };
int c[] = { 10, 20, 30 };
std::vector<int> tt(t, t + 2);
std::vector<int> cc(c, c + 3);
auto lower = std::lower_bound(cc.begin(), cc.end(), tt.front(), [](int a, int b){ return a < b; });
auto upper = std::lower_bound(cc.rbegin(), cc.rend(), tt.back(), [](int a, int b){ return a > b; });
size_t beforeCount = lower - cc.begin();
size_t afterCount = upper - cc.rbegin();
我希望 'lower' 和 'upper' 都指向同一个元素:20。
我在这方面花了一些时间,有人发现这里有问题吗? 我真的很想使用 STL。
谢谢你, 亚历克斯
【问题讨论】:
-
你在重塑equal_range吗?代码看起来合法。
*lower和*upper都是20,beforeCount和afterCount都是1。是什么让你觉得有问题? -
你的问题是什么?您当前的输出是什么,您的预期输出是什么?
-
“我希望 'lower' 和 'upper' 都指向同一个元素:20。” --- 他们有。
-
你为什么要使用 STL?只写一个简单的循环..
-
@nwp:谢谢,确实看起来我可以使用 equal_range 实现相同的效果,但我仍然必须调用它两次,因为我的范围由多个值描述。我在这里使用 equal_range 没有看到任何附加值,我可能遗漏了什么吗?