C++ - 如何在结构向量中找到结构体一个成员的最大值?
C++ - How to find the maximum of one member of struct in a vector of structs?
我有一个结构,它有一个名为id
的成员。
struct st
{
int id;
double d;
};
st s1 = {1, 5.6};
st s2 = {2, 5.7};
st s3 = {3, 4.3};
vector<st> vec;
vec.push_back(s1);
vec.push_back(s2);
vec.push_back(s3);
int max = 0;
for(int i=0; i < vec.size(); i++)
{
if(vec[i].id > max)
max = vec[i].id;
}
如何在不使用 for 循环的情况下在这些结构的向量中找到最大 id?我看到了这个答案,但不明白。 有没有更有效的使用*max_element
方法?
您链接的答案是关于在向量中搜索满足给定条件的元素。找到最大值是不同的,因为您必须在知道最大元素之前考虑所有元素。
std::max_element
允许您选择比较,因此您可以轻松地仅比较id
:
auto max = *std::max_element(vec.begin(),
vec.end(),
[](const st& a,const st& b) { return a.id < b.id; });
你提到了*max_element
,因此我想你知道它返回了一个你可以取消引用的迭代器。但是,请注意,如果容器为空,则上述内容将中断(由于取消引用end
迭代器而导致未定义的行为(,更安全的方法是:
auto it = std::max_element(vec.begin(),
vec.end(),
[](const st& a,const st& b) { return a.id < b.id; });
if (it == vec.end()) throw "max_element called on emtpy vector";
auto max = *it;
附言
[...]不使用for循环?
不要将算法与"无循环"混淆。上面的链接有一个可能的实现,如果你研究它,你会发现它不是魔法,而只是一个普通的循环。alogrithm的优点是表现力强,出错的可能性较小。
相关文章:
- 基于另一个成员参数将函数调用从类传递给它的一个成员
- C++ - 如何在结构向量中找到结构体一个成员的最大值?
- 无法将指向类的成员函数的函数指针作为参数传递给同一类的另一个成员函数
- 使用只有一个成员的工会的目的是什么?
- 访问从联合与另一个成员集复制的联合中的一个成员是否未定义或未指定?
- std::mutex作为一个成员变量对多个线程来说是安全的吗
- 使用线程从另一个成员函数调用一个Member函数
- 如何通过指针将模板成员函数传递给另一个成员函数
- 只有一个成员的匿名联盟
- 复制一个对象并使两者共享一个成员变量 (C++)
- 初始化指针或引用成员变量以指向另一个成员
- 在另一个成员函数中调用成员函数时'int'之前的预期主表达式
- C 将成员函数作为参数传递给另一个成员函数
- 将结构编写为二进制,其中一个成员是字符串
- 如何在另一个成员函数中修改具有常量返回类型的成员函数的返回值
- 从其后声明的另一个成员数据初始化成员数据是否为未定义行为
- 如何使一个成员变量等于在main()中设置的另一个成员变量
- 在另一个成员中动态添加类成员
- 在对结构数组的一个成员进行排序后,移动其成员的其余部分
- 将类成员函数作为参数从同一类的另一个成员函数传递