Необходимо запихивать в QSet пользовательский тип данных, который состоит из двух QString, что-то вроде:
class Mynametype {
public:
QString firstName;
QString lastName;
};
Для этого необходимо написать функцию qHash. Интересует именно алгоритм получения неповторяющегося хеша двух строк. Код на С++/Qt не требуется, сам напишу если буду знать как вычислить.
Особенности строк (если это важно):
Первая строка и вторая строка - какие угодно, но не большие (скажем до 100 символов, хотя в среднем по 10, 20 максимум).
Нужно также чтобы было не простая конкатенация и ее хеш, тк нужно чтобы разные пары firstName lastName хешились по разному, даже если конкатенация строк одинаковая. Тоесть если есть скажем полное имя
"Abdul Karim Jabar"
, то
объекты типа Mynametype с
{ firstName="Abdul ", lastName="Karim Jabar" }
и
{ firstName="Abdul Karim", lastName=" Jabar" }
это РАЗНЫЕ объекты, несмотря на то что конкатенация firstName + lastName равна.
Пока что пришло в голову лишь сделать конкатенацию и в середину всунуть какой-то символ разделитель и уже такую строку захешировать уже имеющимся в Qt методом. Типа:
return qHash(firstName+"|"+lastName);
Но чет не уверен что это нормальный способ, поэтому оцените нормально будет работать или мб в каких-то случаях нет.
Да и хотелось бы что-то более элегантное, особенно с алгоритмической точки зрения.
Вообще говоря исходный тип данных не связан с именами и это просто две разные строки.
Если что, то пробелы и прочие знаки не алфавита не должны никуда деваться и сравниваются на общих основаниях, т.е. например строка с ними на конце или в середине и без них - РАЗНЫЕ строки.