c++ - 根据对的第二个值查找对 vector 的上限

标签 c++ vector

我有一个“v”对的 vector ,它根据该对的第二个值排序。现在我想根据该对的第二个值找出 vector “v”的上限 - 在查找上限时我想忽略 vector 对的第一个 vector ( 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;
}

我希望 upper_bound 位置返回为 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>>);

关于c++ - 根据对的第二个值查找对 vector 的上限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31354120/

相关文章:

python - 如何组合一维数组来创建一个新数组

c++ - 在 Armadillo 库中引用 vector 的最快方法

java - C++ 中的 Gsoap 错误

c++ - C++ 模板函数的重载错误

c++ - 从字符串 vector 中删除特殊字符 C++

c++ - vector 不更新外部函数 C++

c++ - 为什么 std::sort 假定 std::vector< std::vector<int>> 默认为 std::vector,从而产生错误的结果?

c++ - 在我的主窗口中调用 Qt 小部件主窗口函数

c++ - 有没有办法提高这种查找的速度或效率? (C/C++)

c++ - 如何通过引用获取对象的大小?