MyTetra Share
Делитесь знаниями!
Сортировка без учета регистра по лямбде
Время создания: 02.08.2017 19:54
Раздел: Computer - Programming - C++ - Coursera White_Belt

#include <iostream>

#include <algorithm>

#include <vector>


using namespace std;


int main()

{

unsigned int n;

vector<string> v;

cin >> n;


while(n)

{

string st;

cin >> st;

v.push_back(st);

--n;

}


sort(v.begin(), v.end(), [](string i,string j)

{

for(int c = 0; c < i.size(); ++c)

{

i[c] = tolower(i[c]);

}

for(int c = 0; c < j.size(); ++c)

{

j[c] = tolower(j[c]);

}

return (i<j);

});


for(const auto& i : v)

{

cout << i << " ";

}


getchar();

return 0;

}


Вариант от авторов курса (ИМХО, это реально круче):


#include <iostream>

#include <string>

#include <vector>

#include <algorithm>


using namespace std;


int main() {

// считываем вектор строк

int n;

cin >> n;

vector<string> v(n);

for (string& s : v) {

cin >> s;

}

// сортируем

sort(begin(v), end(v),

// компаратор для сортировки — лямбда-функция, сравнивающая строки без учёта регистра

[](const string& l, const string& r) {

// сравниваем лексикографически...

return lexicographical_compare(

// ... все символы строки l ...

begin(l), end(l),

// ... со всеми символами строки r ...

begin(r), end(r),

// ..., используя в качестве компаратора сравнение отдельных символов без учёта регистра

[](char cl, char cr) { return tolower(cl) < tolower(cr); }

);

}

);

// выводим отсортированный вектор

for (const string& s : v) {

cout << s << ' ';

}

return 0;

}


Так же в этом разделе:
 
MyTetra Share v.0.53
Яндекс индекс цитирования