4

すべてのアナグラムが隣り合うように、文字列の配列をソートするメソッドを作成します。私のコンテナーがベクトルの場合、ベクトルには反復子があり、以下のコードである STL ソート関数で使用できるため、非常に単純になります。しかし、コンテナーが配列の場合はどうなるでしょうか? 配列には反復子がなく、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); ???
}
4

6 に答える 6

8

ポインタはイテレータとして機能できるため、必要なのは配列の先頭と末尾の直後へのポインタだけです。

于 2013-03-27T21:34:14.193 に答える
6

(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);
}
于 2013-03-27T21:36:18.203 に答える
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
于 2013-03-27T21:36:09.643 に答える
0
int sortStrarr(string strarr[], int len){
     sort(&strarr[0],&strarr[len],compare) ;
    //sort(strarr's iterator.begin, strarr's iterator.end, compare); ???
}
于 2013-03-27T21:37:12.397 に答える