c++ vector 排序 sort 用不起来 我用的是code::blocks

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++ vector 排序 sort 用不起来 我用的是code::blocks相关的知识,希望对你有一定的参考价值。

无法排序 很奇怪 (我是对照的c++ primer 6th)
求高手解答 谢谢~~

你的vector里只有一个字符串。解决方案:

1)

手动列出所有字符串:

vector <string> words("the", "quick", "red", "fox", "jumps", "over", "the", "slow", "red", "turtle");

2)

利用boost库的split来分割字符串:

// 其他头文件自己加上
#include <boost/algorithm/string.hpp>
using namespace boost;

vector <string> words;
split(words, "the quick red fox jumps over the slow red turtle", boost::is_any_of(" "));

3)

因为分隔符是空格,可使用stringstream来处理:

// 其他头文件自己加上
#include <iterator>
using namespace std;

stringstream ss("the quick red fox jumps over the slow red turtle");
istream_iterator<string> begin(ss);
istream_iterator<string> end;
vector <string> words(begin, end);


===

排序的算法不变(如你所写):

sort(words.begin(), words.end());
for(auto &i : words)
    cout << i << " ";

参考技术A 你这个定义,是把整句话当做了一个字符串,应该用逗号分隔。追问

o 那么怎么让每个单词字典排序呢。。。谢谢

c++用sort对vector排序问题

#include<string>
#include<algorithm>
#include <vector>
using namespace std;
vector<string> a;
int n = 7;
bool compare(string a, string b)

for(int i = 0; i < n - 1; ++ i)

if(a[i] < b[i])
return true;

return false;

int main()

a.push_back("+-+--+");
a.push_back("-+-+--");
a.push_back("- ++ ");
a.push_back("- ++++");
sort(a.begin(), a.end(), compare);
return 0;


运行时错误,请问怎么回事。。。
就是sort那里中断了,我的是VS2010,出错信息是在 a[i] < b[i] 那里,无效的运算符 < ,我是想按照ASCII码大小来比较string中的每一位

把a[i] 和 b[i] 进行强制类型转化为int
或者直接 通过string 里面重载<
#include<string>
#include<algorithm>
#include <vector>
using namespace std;
vector<string> a;
int n = 7;
bool compare(string a, string b)

if(a<b)
return true;
return false;

int main()

a.push_back("+-+--+");
a.push_back("-+-+--");
a.push_back("- ++ ");
a.push_back("- ++++");
sort(a.begin(), a.end(), compare);
return 0;
参考技术A 应该是字符串长度不够,导致越界,直接用string的compare函数即可
return a.compare(b);
参考技术B 我在我的电脑上编译执行了,程序没有错,所以应该是你的电脑环境有问题。
你可以单步调试你的程序,看是哪一行出错了。追问

就是sort那里中断了,我的是VS2010,出错信息是在 a[i] < b[i] 那里,无效的运算符 < ,我是想按照ASCII码大小来比较string中的每一位

追答

我搜看了一下,sort你要传递一个函数给他,但是这个函数不是普通的函数(function),而是仿函数(functor),仿函数是C++编程里的一个概念,就是说,一个类,它内部重载了小括号运算符,就称为仿函数。

建议你搜一下 STL sort 中的比较函数 ,看看别人怎么写的仿函数。

本回答被提问者采纳
参考技术C 用DIRECTX技术 参考技术D vc6没有问题

以上是关于c++ vector 排序 sort 用不起来 我用的是code::blocks的主要内容,如果未能解决你的问题,请参考以下文章

go语言的排序结构体排序

Vector容器 二维数组sort()排序

CodeForces - 844C Sorting by Subsequences (排序+思维)

Codeforces 801C Voltage Keepsake 结构体sort排序+贪心

Codeforces 847B - Preparing for Merge Sort

Lucky Sorting(CodeForces-109D)[思维]