簡體   English   中英

在STL中使用sort()對數組進行排序

[英]using sort() in STL to sort an array

我正在編寫一個問題的代碼:寫一個方法來排序一個字符串數組,以便所有的字謎彼此相鄰。 如果我的容器是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); ??? } 

指針可以充當迭代器,因此您只需要指向開頭的指針,直到數組末尾。

因為(比如在C中)數組可以被轉換為指向第一個元素的指針(但請不要將數組與指針混淆),你可以使用指針來確定開始和結束,所以你寫:

sort(strarr, strarr + len, compare);

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

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

您可以sort()數組使用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
int sortStrarr(string strarr[], int len){
     sort(&strarr[0],&strarr[len],compare) ;
    //sort(strarr's iterator.begin, strarr's iterator.end, compare); ???
}

我們必須使用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;
}

自由函數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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM