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函数?
答案 0 :(得分:1)
std::tuple::operator <
执行字典比较(Cplusplus.com)。这意味着,在sort
和reverse
之后,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());