在 C++ 中对字符串进行排序使用运算符 <
以下数组以 C++ 代码给出:
char strings[105][105];
使用 STL
sort
函数编写 operator<
来对字符串进行排序的正确方法是什么?有可能吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
以下数组以 C++ 代码给出:
char strings[105][105];
使用 STL
sort
函数编写 operator<
来对字符串进行排序的正确方法是什么?有可能吗?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(4)
该代码实际上看起来很像 C 代码,而不是使用 std::string 的 C++ 代码。
没有办法编写一个可以与
std::sort
一起使用的operator<
,因为除非你也编写它,否则没有任何交换可以正常工作。使用
std::string
会使这变得非常简单,否则你必须编写自己的operator<
(查看 C 函数strcmp
) 和交换函数。编辑:请注意,交换 std::string 几乎肯定比交换 char 数组中的大量内存更快。
That code actually looks suspiciously like C code, not C++ which would use
std::string
.There's no way to write an
operator<
that will work withstd::sort
because there's no swap that will work right unless you write that TOO.Using
std::string
would make this pretty trivial, otherwise you'll have to write your ownoperator<
(look at the C functionstrcmp
) andswap
functions.EDIT: Note that swapping
std::string
s will almost certainly be faster than swapping huge swaths of memory in achar
array.不可能编写
operator<
来处理char
数组。It's not possible to write an
operator<
to work withchar
arrays.假设您确实确实需要按行对二维数组进行排序,那么让
std::sort()
为您执行此操作有点困难,即使有一个有效的比较器函子:它需要某种迭代器适配器。但是,您可以轻松使用其他就地排序算法,例如选择排序:
测试运行: https://ideone.com/ 15小时RB
Assuming you really do need to sort a 2D array row-wise, it's a bit difficult to make
std::sort()
do this for you, even given a working comparer functor: it would need some sort of iterator adapter.However, you can easily use other in-place sorting algorithms, such as selection sort:
test run: https://ideone.com/15hRB
您不能重载指针的
operator<
,但也不需要这样做,因为 std::sort 可以接受任何比较函数(或仿函数)。另一个问题是排序算法无法交换数组,因为它们不可分配。但是您可以将指针数组排序到二维数组中(保持原始数组不变)。
You can't overload
operator<
for pointers, but you don't need to, since std::sort can accept any comparison function (or functor).Another problem is that the sort algorithm cannot swap arrays, because they are not assignable. But you can sort an array of pointers into the two-dimensional array (leaving the original array as it is).