2013-09-16 45 views
9

我想知道如何对字符串向量进行排序,使得字符数最少的字符串位于向量的顶部。例如,如果矢量中有ABCD,ABCDE,ABC。美国广播公司获得第一名。我有兴趣知道如何通过sort_if实现这一点,以及谓词是什么样的?任何其他方法,也欢迎基于字符串大小对字符串向量进行排序

+0

不是'std :: sort_if()'。尽管如此,有一个重载'std :: sort()'的谓词。显然,谓词会比较参数的长度和它们是否相等比较字符串的字典顺序;否则如果第一个参数较短,它会返回'true'。 –

+0

仅供参考 - 这些答案现在非常过时,现在不需要重载操作符,只需使用lambda! –

回答

10

让自己的自定义函数对象来比较字符串(S)的大小,并用它来排序字符串。

struct compare { 
    bool operator()(const std::string& first, const std::string& second) { 
     return first.size() < second.size(); 
    } 
}; 

std::vector<std::string> v; 
compare c; 
std::sort(v.begin(), v.end(), c); 
+1

如果它们的长度相同,您可能想要按字典顺序排序字符串。函数调用操作符应该是'const'。 –

+0

你不需要做一个函数来做到这一点。一个简单的比较函数也可以做到这一点。 –

+0

@DietmarKühl我认为你只是想稳定,如果他们是相同的长度。猜猜这取决于提问者。 – BoBTFish

5

应该能够使用普通std::sort(first, last, compare),和这样的比较功能:

bool compareLen(const std::string& a, const std::string& b) 
{ 
    return (a.size() < b.size()); 
} 
2

std::sort需要自定义比较

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

您只需定义将基于上长度的功能的可选参数。

相关问题