我们有STL(标准模板库)多重集,我们希望实现一个二进制搜索,它将为我们提供第一个与某个值相比较小或相等的元素x
从这篇文章:lower_bound == upper_bound,我们看到我们可以使用标准的lower_bound和upper_bound来查找与x相比更大的值,那么查找更小或相等的内容。
有可能做这样的事吗?
答案 0 :(得分:2)
只需使用upper_bound
的{{1}}成员函数即可。 multiset
将返回比您要搜索的值更大的第一个元素。这意味着之前的迭代器将是第一个等于或小于该值的元素。所以在
upper_bound
它会打印int main()
{
std::multiset<int> ms = {1,1,2,2,3,3,4,4,5,5};
auto end = ms.upper_bound(3);
for (auto it = ms.begin(); it != end; ++it)
std::cout << *it;
}
,因为这是所有小于或等于112233
的元素。
当然,您需要确保3
不会返回upper_bound
,这意味着没有任何元素小于或等于您要搜索的内容。