2

我正在使用 C++,并且我有 2 个彼此相关的向量:

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());

那么,我怎样才能使用itinsidestr来获取这封信呢?

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

谢谢!!!

4

4 回答 4

4

怎么样

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

?

(理由)

于 2013-02-05T20:05:21.123 回答
3

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

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

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

值得一提的是,您应该使用以下方法进行初始化str

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

std::string没有采用char.

于 2013-02-05T20:05:16.087 回答
2

像这样获取元素的索引:

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
于 2013-02-05T20:05:08.130 回答
2

这将为您提供返回的迭代器max_element()与向量开始之间的距离:

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

然后,您可以将其用作str.

于 2013-02-05T20:05:19.550 回答