[英]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.