Отображение между наборами целых чисел


Мне нужно сопоставить набор целых чисел с наборами целых чисел.

Прежде всего, я хочу отметить, что не все возможные наборы целых чисел принимаются во внимание. Вместо этого я создаю соответствующие наборы, которые приложение будет (когда - либо) использовать-программно, только один раз, и сериализую его в двоичном файле.

Далее я построю QMap<QSet<int>, QSet<int> > setMap.

Позже приложение создает другой набор целых чисел (по вводу пользователя), вызывает его userSet и быстро получает setMap[userSet].

Итак, проблема в том, что QMap нуждается в operator <, определенных для ключевых типов, и очевидно, что у QSet<int> их нет.

Что я могу с этим поделать?

4 2

4 ответа:

Если наборы статичны, загрузите их в таблицу (QVector<QSet<int> >) и используйте индексы наборов в этой таблице в качестве ключей и значений в Карте (QMap<int,int>) вместо самих наборов.

Вам нужно предоставить свой собственный перегруженный оператор<.>Employee в документации QMap . В вашем случае вам нужно предоставить такую функцию:

 bool operator<(const QSet<int> &first, const QSet<int> &second)
 {
    // your logic to compare the two sets
 }

У вас всегда есть возможность сделать ключ карты a QString. Упорядочьте числа в наборе, выведите их как-нибудь (с произвольным разделителем) и будьте счастливы.

Я бы преобразовал наборы в упорядоченные списки и сопоставил их (а затем преобразовал обратно в наборы). Определить оператор сравнения для упорядоченного списка проще, чем для набора. Конечно, это может быть слишком медленно для вас.

Можно также использовать хэш-карту.