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;
}
正确的顺序是这样:
而我的却是这样,好像sort根本就没有起作用:
为什么sort没有将vector里面的字符串按照字母序进行排序呢,怎么做才是正确的?
sort可以对string进行排序的,默认就是从小到大一位一位字母进行比较ASCII码大小。
c语言里对字符串比较大小应该调用strcmp函数
用默认的<来比较大小,比较的是地址
那么你先定义的地址当然小,后定义的地址大,所以按你push的顺序排序不就对了吗
name.c_str输入时候要resize,而且因为长度固定结尾有0,处理着就很奇怪,所以出错了。