为什么sort对vector<string>排序不起作用?

问题遇到的现象和发生背景

vector里面存string字符串,我想用sort把里面的字符串按照字母序进行排序,发现好像不可行,怎么做才是正确的

问题相关代码,请勿粘贴截图
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
const int maxn = 3000;
vector<vector<string> > hashTable(maxn);
int main()
{
    int n, k;
    int No, num, temp;
    scanf("%d %d", &n, &k);
    for (int i = 0; i < n; i++) {
        string name;
        scanf("%s %d", name.c_str(), &num);
        for (int j = 0; j < num; j++) {
            scanf("%d", &temp);
            hashTable[temp].push_back(name);
        }
    }
    for (int i = 1; i <= k; i++) {
        printf("%d %d\n", i, hashTable[i].size());
        sort(hashTable[i].begin(), hashTable[i].end());
        for (int j = 0; j < hashTable[i].size(); j++) {
            printf("%s\n", hashTable[i][j].c_str());
        }
    }
    return 0;
}
运行结果及报错内容

正确的顺序是这样:

img

而我的却是这样,好像sort根本就没有起作用:

img

我想要达到的结果

为什么sort没有将vector里面的字符串按照字母序进行排序呢,怎么做才是正确的?

sort可以对string进行排序的,默认就是从小到大一位一位字母进行比较ASCII码大小。

img


我试了下你的排序部分没问题啊,你贴的输出是哪里的输出,我用的vs2019正常的啊,你看下输入之后排序之前的的数组内数据正确吗?
还是说你的是测试平台?测试平台的话看下题目说明是否禁用了sort,有些题目要求你实现这个sort的,你直接用肯定不行啊

c语言里对字符串比较大小应该调用strcmp函数
用默认的<来比较大小,比较的是地址
那么你先定义的地址当然小,后定义的地址大,所以按你push的顺序排序不就对了吗

这篇文章:sort排序的vector使用 与 vector的基本用法 也许有你想要的答案,你可以看看

name.c_str输入时候要resize,而且因为长度固定结尾有0,处理着就很奇怪,所以出错了。