C++ 查找元组向量中的最大值
我有一个元组向量 伪:C++ 查找元组向量中的最大值,c++,C++,我有一个元组向量 伪: vector<(x, x)> 向量 其中两个x代表两个不同的值。我要做的是找到整个向量中最大值的x 代码: #include <iostream> #include <vector> #include <tuple> int main() { //Making vector std::vector<std::tuple<int, int>> v; //Adding on
vector<(x, x)>
向量
其中两个x代表两个不同的值。我要做的是找到整个向量中最大值的x
代码:
#include <iostream>
#include <vector>
#include <tuple>
int main() {
//Making vector
std::vector<std::tuple<int, int>> v;
//Adding one random tuple to it
v.push_back(std::make_tuple(1,50));
//Getting biggest value in the vector
int bufferMax = 0;
for (auto i : v) {
for (int j = 0; j < 2; j++) {
int nrToTest = std::get<0>(i);
if (j == 1) std::get<1>(i);
if (nrToTest > bufferMax) bufferMax = nrToTest;
}
}
//Output biggest
std::cout << bufferMax << std::endl;
}
#包括
#包括
#包括
int main(){
//生成向量
std::向量v;
//向其中添加一个随机元组
v、 推回(std::make_tuple(1,50));
//获取向量中的最大值
int bufferMax=0;
用于(自动i:v){
对于(int j=0;j<2;j++){
int nrToTest=std::get(i);
如果(j==1)std::get(i);
如果(nrToTest>bufferMax)bufferMax=nrToTest;
}
}
//产量最大
std::cout bufferMax)bufferMax=nrToTest;
}
但我仍然想知道为什么第一个不起作用?这取决于如何定义最大值。在第一个代码段中,仅比较每个元组的第一个值:
int bufferMax = 0;
for (auto i : v) { // Iterate over all elements
for (int j = 0; j < 2; j++) {
int nrToTest = std::get<0>(i); // Get the first entry in the tuple
if (j == 1) std::get<1>(i); // This is useless: you get the second value
// in the tuple but you don't do anything with it.
if (nrToTest > bufferMax) // You update the max, but nrToTest
// is always the first value in the tuple
bufferMax = nrToTest;
}
}
int bufferMax=0;
对于(自动i:v){//迭代所有元素
对于(int j=0;j<2;j++){
int nrToTest=std::get(i);//获取元组中的第一个条目
如果(j==1)std::get(i);//这是无用的:您将获得第二个值
//在元组中,但你什么都不做。
if(nrToTest>bufferMax)//更新max,但nrToTest
//始终是元组中的第一个值
bufferMax=nrToTest;
}
}
第二个代码段之所以有效,是因为在每次迭代中,您将
nrToTest
设置为元组中最大的条目,然后将其与全局最大值进行比较。这取决于您如何定义最大值。在第一个代码段中,仅比较每个元组的第一个值:
int bufferMax = 0;
for (auto i : v) { // Iterate over all elements
for (int j = 0; j < 2; j++) {
int nrToTest = std::get<0>(i); // Get the first entry in the tuple
if (j == 1) std::get<1>(i); // This is useless: you get the second value
// in the tuple but you don't do anything with it.
if (nrToTest > bufferMax) // You update the max, but nrToTest
// is always the first value in the tuple
bufferMax = nrToTest;
}
}
int bufferMax=0;
对于(自动i:v){//迭代所有元素
对于(int j=0;j<2;j++){
int nrToTest=std::get(i);//获取元组中的第一个条目
如果(j==1)std::get(i);//这是无用的:您将获得第二个值
//在元组中,但你什么都不做。
if(nrToTest>bufferMax)//更新max,但nrToTest
//始终是元组中的第一个值
bufferMax=nrToTest;
}
}
第二个代码段之所以有效,是因为在每次迭代中,您将nrToTest
设置为元组中最大的条目,然后将其与全局最大值进行比较。此代码段(按第一个元素排序)起作用:
std::向量向量向量机;
使用std::max\u元素进行排序
auto result = std::max_element(vec.begin(), vec.end(), [](const std::tuple<int, int>& lhs, const std::tuple<int, int>& rhs)
{
return std::get<0>(lhs) < std::get<0>(rhs);
});
auto result=std::max_元素(vec.begin(),vec.end(),[](常量std::tuple&lhs,常量std::tuple&rhs)
{
返回std::get(lhs)
使用std::tie获得结果:
int a, b;
std::tie(a,b) = *(result);
std::cout << a << " " << b << std::endl;
inta,b;
标准::tie(a,b)=*(结果);
std::cout此代码段(按第一个元素排序)工作:
std::向量向量向量机;
使用std::max\u元素进行排序
auto result = std::max_element(vec.begin(), vec.end(), [](const std::tuple<int, int>& lhs, const std::tuple<int, int>& rhs)
{
return std::get<0>(lhs) < std::get<0>(rhs);
});
auto result=std::max_元素(vec.begin(),vec.end(),[](常量std::tuple&lhs,常量std::tuple&rhs)
{
返回std::get(lhs)
使用std::tie获得结果:
int a, b;
std::tie(a,b) = *(result);
std::cout << a << " " << b << std::endl;
inta,b;
标准::tie(a,b)=*(结果);
如果(j==1)nrToTest=std::get(i),那么它应该是
如果(j==1)nrToTest=std::get(i),则它应该是代码>