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),则它应该是