我想知道如何对字符串向量进行排序,使得具有最少字符的字符串位于向量的顶部。例如,如果向量中包含ABCD,ABCDE和ABC,则ABC应该排在最前面。我想知道如何使用sort_if实现,并且谓词应该是什么样子?也欢迎使用其他方法。
创建自定义函数对象来比较字符串的大小,并将其用于对字符串进行排序。
struct compare {
inline bool operator()(const std::string& first,
const std::string& second) const
{
return first.size() < second.size();
}
};
std::vector<std::string> v;
compare c;
std::sort(v.begin(), v.end(), c);
在现代的C++中,我们可以使用lambda来完成相同的操作。std::vector<std::string> v;
std::sort(v.begin(), v.end(), []
(const std::string& first, const std::string& second){
return first.size() < second.size();
});
您应该能够使用常规的std::sort(first, last, compare)
,并编写以下类似的比较函数:
bool compareLen(const std::string& a, const std::string& b)
{
return (a.size() < b.size());
}
std::sort
接受一个可选参数,用于自定义比较
template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
std::sort_if()
。但是有一个重载的std::sort()
采用谓词。该谓词会比较参数的长度,如果它们相等,则比较字符串的词法顺序;否则,如果第一个参数更短,则返回true
。 - Dietmar Kühlstd::sort(words.begin(), words.end(), [](std::string a, std::string b) {return a.length() < b.length(); });
- hmofrad