按lexicographical_compare()函数排序
Sort by lexicographical_compare() function
是否有任何方法使用lexicographical_compare()
函数在c++中排序字符串?
我可以通过STL排序,但我的问题是关于lexicographical_compare()
函数。
这个问题措辞不好。当然,std::lexicographical_compare
不修改任何东西,所以排序你不能只用std::lexicographical_compare
:你必须以某种方式使用std::sort
(或同等)。对于"如何按字典顺序对std::string
s的容器进行排序"的正确答案是std::sort(vec.begin(), vec.end())
,因为std::string
s上的operator<
是按字典顺序比较的。
假设您的问题是如何将容器范围按字典顺序排序的更广泛问题的示例(这实际上更多的是如何使用自定义比较函数对象来改变std::sort
的行为的问题),您只需为std::sort
提供比较操作符。例如:
// A function objecto to do lexicographical comparisons
template <typename Container>
bool LexCompare(const Container& a, const Container& b) {
return std::lexicographical_compare(a.begin(), a.end(),
b.begin(), b.end());
}
// Use that comparison function to sort a range:
template <typename ContainerIterator>
void sort_by_lexicographical_comapre(ContainerIterator beg,
ContainerIterator end)
{
std::sort(beg, end, LexCompare<typename ContainerIterator::value_type>);
}
int main() {
std::vector<std::string> v;
v.push_back(std::string());
v[0].push_back('1');
v[0].push_back('3');
v[0].push_back('0');
v.push_back(std::string());
v[1].push_back('1');
v[1].push_back('3');
sort_by_lexicographical_comapre(v.begin(), v.end());
for (int i = 0; i != v.size(); ++i) {
std::cout << v[i] << "n";
}
return 0;
}
你可以改变上面的v
类型为std::vector<std::vector<int> >
,并将整数推入它们,它仍然可以工作
您不需要std::lexicographical_compare
来排序字符串。你只需要std::sort
算法:
#include <iostream>
#include <string>
#include <algorithm>
int main()
{
std::string s("qwertyuioplkjhgfdsazxcvbnm");
std::cout << s << "n";
std::sort(s.begin(), s.end());
std::cout << s << "n";
}
同样适用于字符串集合的排序:
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
int main()
{
std::vector<std::string> v{"apple" , "Apple" ,"AppLe" , "APPLe"};
for (const auto& s : v)
std::cout << s << " ";
std::cout << "n";
std::sort(v.begin(), v.end());
for (const auto& s : v)
std::cout << s << " ";
std::cout << "n";
}
相关文章:
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- std::sort()函数无法对向量的一部分进行排序
- 使用自定义比较函数使用std::sort()对矢量字符串进行排序时出现问题
- 用于合并排序的合并函数
- 如何计算此排序函数的时间复杂度?
- 什么是自定义比较器以及如何在 C++ 的排序函数中使用它?
- 为什么用户定义的函数不按照给定的顺序对相同长度的元素进行排序?
- 自定义排序函数中的堆溢出
- 分段 排序函数实现中的错误
- 使用模板化分配器和对向量进行排序的函数
- 为什么我的函数接受"std::string"进行排序不会改变它?
- 对没有比较器或λ函数的向量进行排序?
- C++中的析构函数和构造函数排序
- 数组中的函数排序错误
- 如何命名比较谓词函数排序向量
- 按lexicographical_compare()函数排序
- 构造函数排序(全局作用域)问题
- 按接受c++中参数的函数排序
- 函数排序错误
- 根据不同函数排序的std::向量的交集