在STL中使用sort()对数组进行排序

时间:2013-03-27 21:30:27

标签: c++ sorting iterator

我正在编写一个问题的代码:写一个方法来对字符串数组进行排序,以便所有的字谜彼此相邻。 如果我的容器是vector,它将非常简单,因为vector有迭代器,可以在STL sort函数中使用,它是下面的代码: 但是如果容器是一个数组怎么办? Array没有迭代器,也不能使用sort()直接对数组进行排序。我想知道有没有办法创建一个数组迭代器,以便我可以使用sort()直接对数组进行排序?     谢谢!

#include <iostream>
#include<string>
#include<algorithm>
#include<vector>
using namespace std;

bool compare(string s1, string s2){
  sort(s1.begin(), s1.end());  //sort return void, not the sorted result!!!!!!!!!!
  sort(s2.begin(), s2.end());
  return s1<=s2;
}


void sort_string(vector<string> &v){
    sort(v.begin(), v.end(), compare);
}
If I want to use array itertor:

bool compare(string s1, string s2){
        sort(s1.begin(), s1.end());
        sort(s2.begin(), s2.end());
        return s1<=s2;
}


int sortStrarr(string strarr[], int len){

    //sort(strarr's iterator.begin, strarr's iterator.end, compare); ???
}

6 个答案:

答案 0 :(得分:6)

指针可以充当迭代器,所以你只需要指向开头的指针,直到数组末尾。

答案 1 :(得分:6)

as(比如在C中)数组可以被转换为指向第一个元素的指针(但是请不要将数组与指针混淆)你可以使用指针来确定开始和结束,所以你写:

sort(strarr, strarr + len, compare);

或者如果您使用C ++ 11(或Boost),您可以使用array class:

template<std::size_t N>
int sortStrarr(std:array<string, N>& strarr, int len){
    sort(strarr.begin(), strarr.end(), compare);
}

答案 2 :(得分:3)

您可以将sort()用于数组。指针充当迭代器。

示例:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main()
{
    string arr[5]={"BBB","AAA","CCC","FFF", "EEE"};
    sort(arr,arr+5);
    for(string i: arr)
    {
        cout << i << endl;
    }
}

,输出为:

AAA
BBB
CCC
EEE
FFF

答案 3 :(得分:0)

int sortStrarr(string strarr[], int len){
     sort(&strarr[0],&strarr[len],compare) ;
    //sort(strarr's iterator.begin, strarr's iterator.end, compare); ???
}

答案 4 :(得分:0)

我们必须使用sort函数对字符串数组进行排序。

int main()
{
   string arr[5] = {"e", "b", "c", "d", "a'};
   sort(arr, arr+5);
   for(int i=0; i<5; i++)
   {
     cout<<arr.at(i)<<" ";
   }
   return 0;
}

答案 5 :(得分:0)

自由函数std::begin()std::end()(自C ++ 11以来)专门用于数组类型,但编译器必须知道大小:

template <typename T, std::size_t N>
int sortStrarr(T array[N])
{
    // 'using' allows ADL to select best overload
    using std::begin;
    using std::end;
    std::sort(begin(array), end(array));
}

如果只有start和(运行时)大小,那么可以使用指针作为迭代器:

template <typename T>
int sortStrarr(T array[], size_t len)
{
    std::sort(array, array+len);
}