【发布时间】:2012-11-04 03:42:27
【问题描述】:
如果我有以下向量 {10 10 10 20 20 20 30 30}
我想要一个函数返回整数的位置 = X 或直接返回 X 之后的较小元素,例如,如果我正在搜索 11 我希望函数返回 2 因为第二个元素(10)是第一个较小的元素向量中的元素超过 11。
我尝试使用 lower_bound,但这不起作用。
int myints[] = {10,20,30,30,20,10,10,20};
vector<int> v(myints,myints+8); // 10 20 30 30 20 10 10 20
vector<int>::iterator low,up;
sort (v.begin(), v.end()); // 10 10 10 20 20 20 30 30
low=lower_bound (v.begin(), v.end(), 11); //
up= upper_bound (v.begin(), v.end(), 11); //
cout << "lower_bound at position " << int(low- v.begin()) << endl;
cout << "upper_bound at position " << int(up - v.begin()) << endl;
return 0;
此代码输出:
lower_bound at position 3
upper_bound at position 3
【问题讨论】:
-
但在您的示例中,位置 2 不是小于 11 的第一个元素。它的 last 元素更小。可能是
upper_bound() - 1,但实际上你需要明确你想要什么并适当地编码。 -
你的向量总是排序的吗?还是只是巧合?
标签: c++ stl vector binary-search