<第一元素的指数>使用STL :: algorithm向量中的数字?

时间:2012-02-12 00:42:36

标签: c++ algorithm stl

我有一个排序std::vector<unsigned long long int> myvector(所有值都不同)。

查找myvector的第一个索引size_t idx(不是迭代器)的值的最短方法是什么?到MAX_UI32 = 4294967295U

例如:

[1, 34, 83495, 4294967295, 4294967296, 104000000000] -> idx = 4
[1, 34, 83495, 923834, 912834823, 4294967295] -> idx = 6 (= size of myvector)

如何在一行代码中实现这一目标?

非常感谢。

3 个答案:

答案 0 :(得分:3)

upper_bounddistance的组合应该可以解决问题:

#include <algorithm>
#include <iterator>
#include <vector>

std::vector<unsigned long long int> v;

// ...

return std::distance(v.begin(),
                     std::upper_bound(v.begin(), v.end(), MAX_UI32));

如果没有此类元素,upper_bound会返回v.end(),因此您的结果将等于v.size()

答案 1 :(得分:2)

upper_bound中使用algorithm。请参阅:http://www.cplusplus.com/reference/algorithm/upper_bound/

答案 2 :(得分:0)

添加你可以使用和std::find_if但是在这种情况下你需要编写一个谓词函数:

bool IsBigger(unsigned long long int ull) {
  return (ull > MAX_UI32);
}

std::vector<unsigned long long int>::iterator it = std::find_if(v.begin(), v.end(), IsBigger);
size_t index = std::distance(v.begin(), it);