我们如何在c ++中使用std :: sort对2D字符串数组进行排序?

时间:2018-02-02 10:59:10

标签: c++ arrays string sorting

我已经尝试使用以下代码,但是它出错了。但是,同一段代码在2D整数数组上运行良好。

代码: sort(str [i],str [i] +4); //我是字符串

的循环迭代器

错误:

  

[错误]不匹配'运营商+' (操作数类型是' std :: string {aka   性病:: basic_string的}'和' int')

1 个答案:

答案 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;
}

Live Code