所需的页眉
<algorithm>
回到顶端
原型
template<class ForwardIterator, class T> inline
ForwardIterator upper_bound(ForwardIterator first,
ForwardIterator last,
const T& value)
注: 在原型中的类/参数名称与在头文件中的与原始版本不匹配。他们已被修改,以提高可读性。
回到顶端
说明
upper_bound 算法将最后一个位置返回序列中的序列的顺序进行维护,可以在插入值。
upper_bound 返回迭代器放在该位置的值可将插入在范围 [第一次...最后一次),或如果没有此类位置存在,则返回上一次。
upper_bound 假定范围 [第一次...最后一次) 进行排序使用运算符 <。
回到顶端
示例代码
//////////////////////////////////////////////////////////////////////
//
// Compile options needed: /GX
//
// upper_bound.cpp : Illustrates how to use the upper_bound
// function.
//
// Functions:
//
// upper_bound : Return the upper bound within a range.
//
// Written by Kalindi Sanghrajka
// of Microsoft Product Support Services,
// Software Core Developer Support.
// Copyright (c) 1996 Microsoft Corporation. All rights reserved.
//////////////////////////////////////////////////////////////////////
// disable warning C4786: symbol greater than 255 character,
// okay to ignore
#pragma warning(disable: 4786)
#include <iostream>
#include <algorithm>
#include <functional>
#include <vector>
using namespace std;
void main()
{
const int VECTOR_SIZE = 8 ;
// Define a template class vector of int
typedef vector<int, allocator<int> > IntVector ;
//Define an iterator for template class vector of strings
typedef IntVector::iterator IntVectorIt ;
IntVector Numbers(VECTOR_SIZE) ;
IntVectorIt start, end, it, location ;
// Initialize vector Numbers
Numbers[0] = 4 ;
Numbers[1] = 10;
Numbers[2] = 10 ;
Numbers[3] = 30 ;
Numbers[4] = 69 ;
Numbers[5] = 70 ;
Numbers[6] = 96 ;
Numbers[7] = 100;
start = Numbers.begin() ; // location of first
// element of Numbers
end = Numbers.end() ; // one past the location
// last element of Numbers
// print content of Numbers
cout << "Numbers { " ;
for(it = start; it != end; it++)
cout << *it << " " ;
cout << " }\n" << endl ;
//return the last location at which 10 can be inserted
// in Numbers
location = upper_bound(start, end, 10) ;
cout << "Element 10 can be inserted at index "
<< location - start << endl ;
}
程序输出为:
Numbers { 4 10 10 30 69 70 96 100 }
Lower_bound 和 upper_bound的区别
lower_bound: the position that found is the first pos which value is not lower than compare value
upper_bound: the position that found is the first pos which value is larger than compare value
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int A[] = { 1, 2, 3, 3, 3, 5, 8 };
const int N = sizeof(A) / sizeof(int);
for (int i = 1; i <= 10; ++i) {
int * p = upper_bound(A, A + N, i);
int * q = lower_bound(A,A+N,i);
cout << "Searching for " << i << ". "<<endl;
cout << "upper_bound Result: index = " << p - A << ", "<<endl;
cout << "lower_bound Result: index = " << q - A << ", "<<endl;
if (p != A + N)
{
cout << "upper_bound A[" << p - A << "] == " << *p << endl;
cout << "lower_bound A[" << q - A << "] == " << *q << endl;
}
else
cout << "which is off-the-end." << endl;
cout<<"--------------------------------"<<endl;
}
return 0;
}
if (keyScopeItem.getEnableAggregation())
{
bool isMatch = false;
ScopeStartEndValuesMap::const_iterator upperIter = keyScopeItem.getKeyScopeValues().upper_bound(keyScopeItem.getAggregateKeyValue());
if ( upperIter != keyScopeItem.getKeyScopeValues().begin() )
{
--upperIter;
if ( keyScopeItem.getAggregateKeyValue() >= upperIter->first
&& keyScopeItem.getAggregateKeyValue() <= upperIter->second )
{
isMatch = true;
}
}
// will match...
if ( isMatch )
{
eastl::string msg;
msg.sprintf("[StatsConfigData].parseKeyScopeItem(): key scope item [%s] has non-unique aggregate key value [%"PRId64"]",
keyScopeItemName, keyScopeItem.getAggregateKeyValue());
TdfString& str = validationErrors.getErrorMessages().push_back();
str.set(msg.c_str());
return false;
}
}
分享到:
相关推荐
- algorithm库中的常用算法,如binary_search、lower_bound、upper_bound用于有序容器的搜索。 3. **STL面试题.doc** 面试题可能包含各种实践问题,比如: - 如何使用STL实现高效的字符串反转? - 如何在不复制...
同时,STL提供了诸如lower_bound、upper_bound和binary_search等二分查找算法,它们在有序容器中寻找元素时效率很高。 总的来说,了解和掌握SGI STL及其Boost增强版对于任何C++开发者来说都是必要的技能。通过阅读...
在 STL 中,binary_search 是一个非常重要的算法,它可以在对数时间内找到对象的位置。equal_range 是一个组合算法,它由 lower_bound 和 upper_bound 两个算法组成,可以找到所有等价元素的区间。 C++ STL 中的...
- **查找算法**:如 `find()`、`find_if()`、`lower_bound()`、`upper_bound()` 和 `binary_search()`。 - **交换和赋值算法**:如 `swap()`、`copy()` 和 `assign()`。 - **迭代器操作**:如 `advance()`、`next...
- **搜索算法**:`find` 查找第一个匹配的元素,`binary_search` 在有序容器中查找元素。 - **迭代器操作**:`advance` 移动迭代器,`next` 和 `prev` 分别向前和向后移动一个元素。 - **复制与移动**:`copy` 复制...
例如,算法库中包含诸如排序(如sort、stable_sort)、搜索(如find、binary_search)和元素操作(如copy、swap)等。 4. 函数对象(Function Objects):在C++ STL中,函数对象是可以被当作参数传递给算法的任何...
STL中的算法包括排序算法(如`sort`、`stable_sort`)、查找算法(如`find`、`binary_search`)、集合操作算法(如`unique`、`set_union`)以及变换和复制算法(如`transform`、`copy`)。这些算法大多数都具有泛型...
- **查找算法**:`find()`、`binary_search()` 在有序容器中查找元素。 - **交换和复制**:`swap()` 交换两个元素,`copy()` 将元素从一个容器复制到另一个容器。 - **集合操作**:`unique()` 删除重复元素,`merge...
21.11 重复元素子序列搜索search_n 299 21.12 最后一个子序列搜索find_end 301 21.13 本章小结 303 第22章 变易算法 304 22.1 元素复制copy 304 22.2 反向复制copy_backward 305 22.3 元素交换swap ...
binary_search算法是C++ STL中的一种查找算法,用于查找容器中的指定元素是否存在。该算法的函数原型为`bool binary_search(iterator beg, iterator end, const T& value)`,其中`beg`和`end`分别表示容器的开始和...
- 包括排序算法(如`sort`)、查找算法(如`find`、`binary_search`)、复制算法(如`copy`)、交换和赋值算法等。 - 新的C++ 11/14标准引入了范围基础的for循环和算法,如`emplace`、`emplace_back`、`erase`等,...
4. `binary_search`:在已排序的序列中查找指定值,如果找到则返回true,可使用自定义比较函数。 5. `copy`:将一个序列的所有元素复制到另一个位置,保持原有顺序。 6. `copy_backward`:与`copy`相似,但元素...
21.11 重复元素子序列搜索search_n 299 21.12 最后一个子序列搜索find_end 301 21.13 本章小结 303 第22章 变易算法 304 22.1 元素复制copy 304 22.2 反向复制copy_backward 305 22.3 元素交换swap ...
- **查找算法**:`find()`、`find_if()`、`binary_search()`等用于在序列中查找特定元素或满足条件的元素。 - **集合操作**:`set_union()`、`set_intersection()`、`set_difference()`和`set_symmetric_...
STL提供了一套丰富的算法,例如for_each、count、find、sort、binary_search、merge等。 4. 函数对象:函数对象是可以像函数一样被调用的对象。在STL中,很多算法都需要函数对象作为参数,以便在数据处理过程中进行...
2. **搜索算法**:`find()`、`find_if()`、`binary_search()`等用于在序列中查找特定值或满足特定条件的元素。 3. **迭代算法**:例如`for_each()`,允许我们对容器内的每个元素应用一个函数或操作。 4. **复制与...
- **搜索算法**:如`std::find`寻找特定元素,`std::binary_search`在已排序容器中查找元素。 - **迭代算法**:如`std::transform`将一个范围内的元素转换为另一个范围。 - **算法操作**:如`std::copy`复制一个...
STL提供了大量通用算法,如排序(`sort`)、搜索(`find`、`binary_search`)、合并(`merge`)、去除重复项(`unique`)、复制(`copy`)等,这些算法可以应用于任何类型的容器,无需关心其内部实现。 5. **函数...
21.11 重复元素子序列搜索search_n 299 21.12 最后一个子序列搜索find_end 301 21.13 本章小结 303 第22章 变易算法 304 22.1 元素复制copy 304 22.2 反向复制copy_backward 305 22.3 元素交换swap ...
- **查找算法**:如`find`、`binary_search`。 - **修改算法**:如`reverse`、`replace`。 - **数值算法**:如`accumulate`、`inner_product`。 #### 四、STL的应用案例 ##### 4.1 实例分析 假设我们需要处理一个...