c++11 - C++中如何获取一组字符串中最长的字符串

标签 c++11 set

我有一组字符串

set<string> strings;

如何获得集合中包含的最长字符串?在 python 中我可以执行以下操作:

print max(strings, key=len)

c++中有类似的函数吗?

最佳答案

您可以使用 std::max_element <algorithm> 一起提供 header 并传递自定义比较谓词。

#include <algorithm>
#include <iostream>

const auto longest = std::max_element(strings.cbegin(), strings.cend(),
    [](const std::string& lhs, const std::string& rhs) { return lhs.size() < rhs.size(); });

if (longest != strings.cend())
    std::cout << *longest << "\n";

这显然不如 python 版本那么简洁,这就是范围的作用。与range-v3预测,这归结为

#include <range/v3/all.hpp>

const auto longest = ranges::max_element(strings, std::less<>{}, &std::string::size);

关于c++11 - C++中如何获取一组字符串中最长的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52419536/

相关文章:

没有动态调度开销的基类抽象方法的 C++ 习惯用法?

c++ - 编写一个模板函数来评估具有任何返回类型的 lambda 函数?

c++ - 绑定(bind) std::function 错误

windows - 如何使用命令输出作为另一个命令的参数?

Python - 比较两个列表以查找计数

C++ 完美函数转发

algorithm - 一组元素的组合,没有对称重复

Java Set迭代器,删除元素安全吗?

python - 一个字符串的所有字符都属于一个集合吗?

c++ - 数据成员是否形成范围?