gpt4 book ai didi

c++ - 在元组 vector 中找到最大值

转载 作者:行者123 更新时间:2023-11-27 23:47:55 24 4
gpt4 key购买 nike

我有一个元组 vector 。

伪:

vector<(x, x)>

其中两个 x 代表两个不同的值。我要做的是找到整个 vector 中值最大的 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;
}

输出:1

在第一个循环中,我遍历 vector 中的所有元组,然后我有第二个循环在值 0 和 1 之间振荡。如果该值为 0,我将元组 i 中的第一个元素与缓冲区进行比较,否则第二个元组 i 中的元素。但是,正如您在输出中看到的那样,此代码不起作用。

为什么这个算法不起作用?

我发现了另一种可行的算法(我猜)

  int bufferMax = 0;
for (auto i : v) {
//Biggest tuple value:

int nrToTest = std::get<0>(i);
if (std::get<0>(i) < std::get<1>(i)) {
nrToTest = std::get<1>(i);
}


if (nrToTest > 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;
}
}

第二个代码段之所以有效,是因为在每次迭代中,您将 nrToTest 设置为元组中最大的条目,然后将其与全局最大值进行比较。

关于c++ - 在元组 vector 中找到最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49091184/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com