C++搜索MAX的矢量,并得到相同位置的第二个矢量
C++ search vector for MAX, and get same position form a second vector
我使用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
的索引。
相关文章:
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 等待整个 omp 块完成,然后再调用第二个函数
- 我想在C++中读取一些多个字符,但它永远不会读取第二个字符
- 如何在创建自定义迭代器时获得 std::p air 的第一个和第二个?
- WinAPI 在单击第一个对话框上的按钮控件并销毁第一个对话框后创建第二个对话框
- 将第二个 GATT 服务添加到 Movesense 容器
- 如何在 c++ 中根据第二个元素按降序对列表进行排序
- 对的排序向量 (std::vector<pair<int, int>>) 按对的第一个元素搜索并更新第二个元素值
- 比较 2 个向量并从第二个向量中删除在第一个 - c++ 中找不到的元素
- C++ 2D 数组写入多个位置
- 为什么这个程序没有打印返回的迭代器的正确第二个元素?
- 使第二个类的构造函数成为第一个类中的友元函数
- 为什么第二个代码给出了预期的结果,而第一个代码却没有?
- 为什么第一个代码块产生垃圾值,而第二个代码块将类成员的值相加?
- 打印无序映射的第二个元素,即集合
- 我有一个类,它创建了另一个类的实例.如何将变量通过第一个类传递到第二个类的实例化中?
- 需要使用模板查找数组的第二个最小和最小值
- c++:交换向量中所有元组的第一个和第二个元素
- 如何获得相同数量的第一个和第二个元素以及它们在c++中各自的位置
- C++搜索MAX的矢量,并得到相同位置的第二个矢量