在下面的代码中,我尝试使用std::max_element
打印std::vector
中最大的std::string
。
我希望下面代码的输出是:
Harmlessness
我得到的实际输出是:
This
验证码:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main(){
vector <string> strlist;
strlist.push_back("This");
strlist.push_back("Harmless");
strlist.push_back("Harmlessness");
cout << *max_element(strlist.begin(), strlist.end());
return 0;
}
我的问题:
你能解释一下为什么代码产生了上面的实际输出而不是我期望的输出吗?
1条答案
按热度按时间wfypjpf41#
std::string
的默认比较器执行**lexicographic比较**(请参见:std::string comparators)。字符串 “This” 在此顺序中比任何以 “H” 开头的字符串都要晚。
您可以使用
std::max_element
的另一个重载,它接受一个显式的比较器参数:template<class ForwardIt,class Compare> constexpr ForwardIt max_element(ForwardIt first,ForwardIt last,Compare comp);
如果你想按长度比较字符串,可以用途:
输出:
**旁注:**最好避免
using namespace std
-参见此处Why is "using namespace std;" considered bad practice?。