LINUX.ORG.RU

Список с сортировкой

 


0

1

Qt. Нужен класс, который:

  • Имеет int-поле
  • Имеет функцию append/add для int-поля и кастомной struct
  • Имеет функцию сортировки по int-полю.
  • Имеет возможность обращения по int-полю как индексу и выдать сигнал (либой реализации), если такого поля нет.

Что есть готового, чтобы свой велосипед не писать?

★★★

Последнее исправление: AlexCones (всего исправлений: 1)
Ответ на: комментарий от AlexCones

Сигнал вроде как никто из стандартных посылать не умеет...

Так что наследуйся от QMap и добавляй сигнал сам, это же элементарно...

Хотя я бы не наследовался, а обертку написал... Наверное еще проще будет.

solovey ★★
()
Последнее исправление: solovey (всего исправлений: 1)
Ответ на: комментарий от solovey

Прошу прощения, не знал как сформулировать, чтобы без двоякости. Я имел в виду сигнал не SIGNAL и иже с ним, а типа xxx[index] == -1, если такого нет.

AlexCones ★★★
() автор топика
Ответ на: комментарий от AlexCones

Создай свой класс засунь в него map или что то подобное, и реализуй сигнал любым способом какой знаешь

template <typename T>
class MySortClass
{
public:
....
const T &operator[](int idx) const
{
    проверяешь в мапе поле если нету то emit signal
     иначе возвращаешь поле
}
....
private:
std::map<T,bool> m_map;
}
pozitiffcat ★★★
()
Ответ на: комментарий от ImperialDwarf

ну там уже как душа пожелает. Просто пример как использовать композицию

pozitiffcat ★★★
()
Ответ на: комментарий от AlexCones

Так у QMap, как и у других контейнеров, есть метод

const T QMap::value ( const Key & key, const T & defaultValue ) const
Кто мешает в defaultValue возвращать -1, или что там тебе нужно, в зависимости от типа объекта, хранимого в QMap...

То есть:

QMap<int, int> map;
// add elements
int val = map.value (100500, -1);
if (val != -1) {
  // do smth
}

solovey ★★
()
Ответ на: комментарий от AlexCones

А чем не устраивает QMap::find с QMap::end в качестве -1?

Begemoth ★★★★★
()
Ответ на: комментарий от AlexCones

QMap<int, MyStruct>::operator[] возвращает MyStruct(), если такого индекса нет. Просто сделай MyStruct::isValid() и устанавливай по умолчанию в false, как это в самом Qt сделано.

schizoid ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.