在用这个功能之前,猜测lower_bound()是返回第一个同时大于等于pair两个值元素的地址,在百度找了一圈发现找不到相关的说明,又懒得自己敲代码验证,于是在谷歌上找到了相关的描述并证明了猜想。
于是便可以用这个方法来很方便的解决一些问题,比如找到一串数字里出现第k次的数字x,代码如下。
#include <bits/stdc++.h>
using namespace std;
vector <pair<int, int > > a;
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
{
int b;
cin >> b;
a.emplace_back(b, i);
}
sort(a.begin(), a.end());
int x, k;
cin >> x >> k;
auto it = lower_bound(a.begin(), a.end(), make_pair(x, 0));
if (it - a.begin() < 0)
{
cout << -1;
return 0;
}
it += k - 1;
if (it->first == x)
{
cout << it->second;
}
else
{
cout << -1;
}
}
另外,pair的vector默认排序便是first优先从小到大,first相同再排second。
|