14

我想知道如何对字符串向量进行排序,使字符最少的字符串位于向量的顶部。例如,如果向量中有 ABCD、ABCDE、ABC。ABC 达到顶峰。我很想知道如何使用 sort_if 实现这一点以及谓词是什么样的?也欢迎任何其他方法

4

3 回答 3

21

制作您自己的自定义函子来比较字符串的大小并使用它对字符串进行排序。

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();
    });
于 2013-09-16T15:17:55.340 回答
7

应该能够使用常规std::sort(first, last, compare),以及这样的比较功能:

bool compareLen(const std::string& a, const std::string& b)
{
    return (a.size() < b.size()); 
}
于 2013-09-16T15:17:47.067 回答
2

std::sort接受自定义比较的可选参数

template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );

您可以只定义一个基于长度进行比较的函数。

于 2013-09-16T15:18:47.963 回答