我已经尝试使用以下代码,但是它出错了。但是,同一段代码在2D整数数组上运行良好。
代码: sort(str [i],str [i] +4); //我是字符串
的循环迭代器错误:
[错误]不匹配'运营商+' (操作数类型是' std :: string {aka 性病:: basic_string的}'和' int')
答案 0 :(得分:0)
根据文档std::sort
按升序对[first,last]范围内的元素进行排序。不保证保持相等元素的顺序。
template< class ExecutionPolicy, class RandomIt, class Compare >
void sort( ExecutionPolicy&& policy, RandomIt first, RandomIt last, Compare comp )
首先,最后 - 要排序的元素范围
comp - 比较函数对象(即满足Compare要求的对象),如果第一个参数小于(即在之前排序)第二个参数,则返回true。
复杂性: O(N·log(N))
其中 N = std::distance(first, last)
注意:最好使用vector
而不是array
,特别是在您的情况下( 2D字符串)。
示例:的
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void printTwoDString(vector< vector<string> > twodString){
for(int i = 0; i < twodString.size(); i++){
for(int j = 0; j < twodString[i].size(); j++)
cout<<twodString[i][j]<<" ";
cout<<endl;
}
}
int main() {
vector< vector<string> > twodString = {
{"chandler", "joey", "janice"},
{"gunther", "richard", "rachel"},
{"monika", "phoebe", "ross"}
};
// sort the whole string
std::sort(twodString.begin(), twodString.end());
printTwoDString(twodString);
// sort a single row (should sort second row to gunther rachel richard )
std::sort(twodString[1].begin(), twodString[1].end());
printTwoDString(twodString);
return 0;
}