2014-09-10 14 views
5

Właśnie przeniosłem się do C++ 11 na GCC 4.8 i byłoby miło przenieść się z boost::iequals na korzyść STL. Przeszukałem wokół interwebs, ale nie widziałem żadnych oznak std::iequals lub nowych metod std::basic_string do obsługi tego natywnie w STL.Czy C++ 11 wprowadził algorytm porównywania wielkości liter niewrażliwy na wielkość liter?

Jeśli to nie istnieje w C++ 11, czy podejście do rozwiązania tego problemu zmieniło się od czasu C++ 03 (np. Różne obejścia?), Czy też nadal preferuje się doładowanie?

Dzięki z advance.`

Odpowiedz

10

Nie, C++ 11 nie wprowadziła funkcję porównywania ciąg bez uwzględniania wielkości liter. Na razie musisz trzymać się Boost.

Mam nadzieję, że to pomoże!

0

Nie jest rodzimy porównanie ciąg, ale z bogatym STL można napisać swój własny bardzo prosto coś takiego:

`

bool caseInsensitiveCmp(wstring str1, wstring str2) 
    { 
     if (str1.size() != str2.size()) 
      return false; 
     else 
     return (str1.empty() | str2.empty()) ? 
       false : 
       std::equal(str1.begin(), str1.end(),str2.begin(), 
        [](wchar_t a, wchar_t b) 
        { 
         return tolower(a) == tolower(b); 
        } 
       ); 
    }` 

Pierwszy sprawdzianem jest strzec std równa z porównania na obojętny długość.

Powiązane problemy