Как написать строковый компаратор для использования в set_symmetric_difference [C ++]?

Я пытаюсь использовать функцию set_symmetric_difference (C ++), чтобы найти все объекты, которые появляются только в одном наборе, но не в обоих.

set<string> set1, set2; //assume filled with strings
vector<string> output;

set_symmetric_difference(set1.begin(), set1.end(), set2.begin(), set2.end(), back_inserter(output), comparator);

Я, кажется, немного не уверен, как написать компаратор для сравнения строк в алфавитном порядке. Вот мое лучшее предположение на данный момент:

bool comparator(string s1, string s2)
{
for(int i = 0; i < min(length1,length2); i++)
{
if(s1[i] < s2[i]) return true;
else if( s1[i] == s2[i]) continue;
else return false;
}
}

Я понимаю, что вышеупомянутое не сработало бы для строк Брэда и Брэдли, как бы они сказали, что они эквивалентны.
Я просто хочу знать, является ли это моделирование true, continue и false правильным способом настройки компаратора строки для алфавитного порядка.

Я также обеспокоен сравнением значений ascii, потому что верхний регистр по сравнению с нижним регистром может отбросить «алфавитный» порядок, хотя я полагаю, что это можно легко исправить с помощью to_lower () в строках.

0

Решение

Использовать — ничего. В сравнении по умолчанию используется оператор меньше, чем перегружен для strings через лексикографическое сравнение.

1

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector