C++搜索MAX的矢量,并得到相同位置的第二个矢量

C++ search vector for MAX, and get same position form a second vector

本文关键字:第二个 位置 搜索 MAX C++      更新时间:2023-10-16

我使用C++,我有两个相互关联的向量:

vector<double> val = {.3,.5,.2,.4};
vector<string> str = {'a','b','c','d'};

我想在val中搜索最大值,然后在相同的位置返回str中的字符串:

vector<double>::const_iterator it;
it = max_element(val.begin(), val.end());

那么,我如何在str中使用it来获取字母呢?

string lettter;
letter = str.at(it-> ????? );

谢谢!!!

怎么样

letter = str.at(it - val.begin());

(基本原理)

您可以找出it距离val的开头有多远,然后使用它来索引str:

str[std::distance(std::begin(val), it)]

通过使用std::distance,如果将val的类型更改为迭代器不提供随机访问的容器,这仍然有效。然而,当在随机访问迭代器上使用它时,您仍然会得到恒定的时间复杂性。如果您愿意,使用std::begin可以将val更改为C样式数组。

值得一提的是,您应该使用:初始化str

vector<string> str = {"a","b","c","d"};

std::string没有采用char的构造函数。

获取元素的索引,如下所示:

auto index = std::distance(val.begin(), it);

然后索引到你的字符串数组:

auto letter = str[index];

请注意,如果这些值是相关的,您可能应该强制将它们保持在一起:

typedef std::pair<double, string> valstr_pair;
std::vector<valstr_pair> valstr;
auto it = std::max_element(valstr.begin(), valstr.end(),
    [](const valstr_pair& first, const valstr_pair& second)
    {
        return first.first < second.first; // compare values
    });
it->first;  // max value
it->second; // string of max value

这将给出max_element()返回的迭代器与向量开头之间的距离:

std::distance(val.begin(), it)

然后可以将其用作str的索引。

相关文章: