如何在元组向量中找到最大值?

时间:2016-08-12 13:17:38

标签: c++ arrays stl tuples max

   vector<tuple<int, int,char>> array;
   for(int i=0;i<m-1;i++)
   {
      long long int p;
      cin>>p;
      get<0>(x)=p;//updated value
      get<1>(x)=get<0>(x);//real value
      get<2>(x)='v';
      array.push_back(x);
     }
     sort(array.begin(),array.end());
     reverse(array.begin(),array.end());
    //how to get the maximum of the second field
    //to to element with largest first field
    //and then delete the tuple

假设我有一个数据类型元组数组int, int, char, 例如,(5,5,h);(5,2,h);(5,7,v);(3,1,h);(3,7,h);(1,1,v) 。 它已经根据第一个值按降序排序,   现在我想找到包含最大第一个值的部分   最大的第二价值?所以我必须只搜索前三部分。 有没有办法在这里使用max()或任何其他STL函数?

3 个答案:

答案 0 :(得分:1)

std::tuple::operator <执行字典比较(Cplusplus.com)。这意味着,在sortreverse之后,array的第0项包含所有元组中具有最大第三元素的tuple,其中所有元组中具有最大的第二元素具有最大第一元素的元组,这是你需要的。

所以,只需返回array[0]

答案 1 :(得分:0)

ITNOA

您好,

如果你不想在压缩中使用第三个元组元素,并且你不想使用排序和反向函数。

所以我认为将std::max_element与lambda(如下面的

)一起使用是个不错的选择
typedef tuple<int, int,char> ET;

auto comparator = [](ET a, ET b)
{
   return std::tie(get<0>(a), get<1>(a)) < std::tie(get<0>(b), get<1>(b))
}

答案 2 :(得分:0)

默认operator <是好的,您可以使用

const std::vector<std::tuple<int, int, char>> tuples = // ...

auto it = std::max_element(tuples.begin(), tuples.end());

Demo