根据对的第二个值求对向量的上界
Finding the upper bound of vector of pairs based on second value of pair
我有一个向量对"v",它是根据对的第二个值排序的。现在我想根据这对向量的第二个值求出向量"v"的上界——在求上界的同时,我想忽略向量对中的第一个向量(std::vector<int>
)。
int main () {
std::vector<std::pair<std::vector<int>, int> > v; //10 10 10 20 20 20 30 30
std::vector<int> a;
a.push_back(1);
v.push_back(make_pair(a,10));
a.push_back(2);
v.push_back(make_pair(a,10));
a.push_back(3);
v.push_back(make_pair(a,10));
a.push_back(4);
v.push_back(make_pair(a,20));
a.push_back(5);
v.push_back(make_pair(a,20));
a.push_back(6);
v.push_back(make_pair(a,20));
a.push_back(7);
v.push_back(make_pair(a,30));
a.push_back(8);
v.push_back(make_pair(a,30));
std::vector<std::pair<std::vector<int>, int> >::iterator low,up;
std::vector<int> b;
up= std::upper_bound (v.begin(), v.end(), make_pair(b,25));
std::cout << "upper_bound at position " << (up - v.begin())<<" val="<<v[(up-v.begin())].second<< 'n';
return 0;
}
我希望上界位置返回为6,值返回为30。但是使用上面的代码,我错误地获得位置为0和值为10。有人能建议我如何根据这对的第二个值得到上限,而忽略这对的第一个值
您需要为upper_bound
提供compare
函数
template<typename T>
bool compare(const T &a,const T &b){
return a.second<b.second;
}
和变化:
up= std::upper_bound (v.begin(), v.end(), make_pair(b,25));
:
up= std::upper_bound (v.begin(), v.end(), make_pair(b,25),compare<pair<vector<int>,int>>);
要自定义std::upper_bound
的行为,只需提供比较函数或函子作为第四个参数。
所以不用
up= std::upper_bound (v.begin(), v.end(), make_pair(b,25));
你会做using Pair = decltype( *v.begin() );
up= std::upper_bound (v.begin(), v.end(), make_pair(b,25),
[]( Pair const& a, Pair const& b ) { return a.second < b.second; }
);
如果有帮助的话。您也可以单独编写比较函数,如下所示。
auto lambda = [](const p& p1, const p& p2) {
return p1.first < p2.first;
};
int idx = upper_bound(begin(v), end(v), make_pair(b, 25), lambda) - begin(v);
cout << idx << endl;
相关文章:
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- c++:交换向量中所有元组的第一个和第二个元素
- C++ - 同时对向量的第一个和第二个进行排序
- 为什么我在对向量的第二个元素"push_back"中有C3867错误
- 如何有效地用第二个值对向量对进行分组
- 使用索引与迭代器将向量迭代到倒数第二个元素
- 将对象方法从向量应用于C 的第二个向量中的对象
- 如何在C 对向量的第二个元素上执行较低的操作
- 如何获取地图中向量的第二个值?
- 迭代对向量并访问第一个和第二个元素
- 将出现在此值之前的向量中的第二个值相加<pair>
- 向量C ,获取向量的第二个元素有什么问题
- 在C++中,如何在成对向量的第二个元素上获得迭代器
- 在 c++ 中给出两个整数向量(大小和类型相同),我想从最小到最大元素对一个进行排序,并更改第二个向量的顺序
- 分割 使用指针访问 obj 向量中的第二个元素时出错
- 如何在C++中找到向量中倒数第二个元素
- 如何基于第二个字符串对字符串向量的向量排序
- 遍历以向量和映射作为其第二个节点的映射,并在第二个节点的第二个元素中找到匹配项。C++
- 如何从一对向量中提取第二个元素