你可以做以下两件事之一:
- 首先处理“NULL”,然后以我们经常使用的天真方式对其他字符串进行排序
- 使用您定义的更复杂的顺序对所有字符串进行排序
首先处理“NULL”
标准库有一个“分区”算法,它将所有符合某个条件的元素移动到字符串的末尾。
std::vector<string> vec {
"Potato", "NULL", "NULL", "Charmander" , "Spaghetti", "NULL"
};
auto is_not_null = [](const std::string& s) { return s != "NULL"; }
auto nulls_start = std::partition(vec.begin(), vec.end(), is_not_null);
auto non_nulls_end = nulls_start;
std::sort(vec.begin(), non_nulls_end);
使用复杂比较进行排序
std::vector<string> vec {
"Potato", "NULL", "NULL", "Charmander" , "Spaghetti", "NULL"
};
auto comparator =
[](const std::string& lhs, const std::string& rhs)
{
return rhs == "NULL" or lhs <= rhs;
};
std::sort(vec.begin(), vec.end(), comparator);
comp()
请注意此处的比较与您的功能之间的区别。比较器回答问题“我得到的第一个字符串应该在第二个字符串之前吗?” - 你的comp()
功能只是没有给出符合你要求的答案。