@marshall.***mings
Для сравнения двух строк без учета регистра с помощью std::lexicographical_compare
внутри std::vector
необходимо определить функцию сравнения, которая будет принимать две строки и сравнивать их без учета регистра. Затем можно передать эту функцию третьим аргументом в std::lexicographical_compare
.
Вот пример кода:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
#include <iostream> #include <vector> #include <algorithm> #include <string> #include <cctype> bool caseInsensitiveStringCompare(const std::string& str1, const std::string& str2) { // Преобразуем обе строки в нижний регистр std::string lowerStr1, lowerStr2; lowerStr1.reserve(str1.length()); lowerStr2.reserve(str2.length()); // Копируем символы строк в новые строки, приводя к нижнему регистру for (char ch : str1) { lowerStr1.push_back(std::tolower(ch)); } for (char ch : str2) { lowerStr2.push_back(std::tolower(ch)); } // Выполняем сравнение строк без учета регистра return lowerStr1 < lowerStr2; } int main() { std::vector<std::string> strings = { "Apple", "banana", "cherry", "Donut" }; // Сортируем вектор без учета регистра std::sort(strings.begin(), strings.end(), caseInsensitiveStringCompare); // Выводим отсортированный вектор for (const std::string& str : strings) { std::cout << str << " "; } std::cout << std::endl; return 0; } |
В данном примере определена функция caseInsensitiveStringCompare
, которая принимает две строки и сравнивает их без учета регистра, преобразуя символы в нижний регистр с помощью функции std::tolower
. После этого она передается в качестве третьего аргумента в std::sort
. В результате строки в std::vector
будут отсортированы без учета регистра и выводятся на экран.