Russian Qt Forum
Ноябрь 23, 2024, 02:20 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как в QMultiMap определять количество одинаковых ключей?  (Прочитано 10135 раз)
dsp
Гость
« : Апрель 12, 2011, 19:41 »

Каким алгоритмом можно определить количество одинаковых ключей и узнать диапазон их расположения(есть equal_range, но что-то его я не нашел в qt)
Код:
#include <QtGui>
#include <QApplication>
#include <QMultiMap>

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);   

    QMultiMap<int, QString> multMap;

    multMap.insert(1, "1");
    multMap.insert(1, "1_");
    multMap.insert(1, "1__");
    multMap.insert(2, "2");
    multMap.insert(2, "2_");   

    app.exec();

}

Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Апрель 12, 2011, 20:23 »

int QMap::count ( const Key & key ) const же. Читай ассистент.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
dsp
Гость
« Ответ #2 : Апрель 12, 2011, 20:35 »

пытаюсь вывести в QTextEdit количество повторений ключа
Код:
...
QTextEdit *line = new QTextEdit;
line->show();
...
lint counter = 1;

line->setPlainText(QString(multMap.count(counter)));

выводит
http://s52.radikal.ru/i137/1104/c1/ebed6c7c88f5.png

Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Апрель 12, 2011, 20:38 »

line->setPlainText(QString::number(multMap.count(counter)));
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
dsp
Гость
« Ответ #4 : Апрель 12, 2011, 20:40 »

Спасибо, про ::number я ни ухом ни рылом...
Записан
dsp
Гость
« Ответ #5 : Апрель 12, 2011, 21:33 »

Захотелось вывести все ключи и значения:

Код:
QMultiMap<int, QString>::iterator iterNew = multMap.begin();
QMultiMap<int, QString>::iterator iterOld = multMap.begin();


    while( (iterNew != multMap.end()) || (iterOld != multMap.end()) )
    {        
        while(iterNew.key() == iterOld.key())
        {
            line->append(QString::number(iterNew.key()));
            line->append(QString(iterNew.value()));
            ++iterNew;
        }
        iterOld == iterNew;
    }


но не работает...
« Последнее редактирование: Апрель 13, 2011, 09:19 от dsp » Записан
dsp
Гость
« Ответ #6 : Апрель 13, 2011, 10:00 »


Код:
QMultiMap<int, QString> multMap;

    multMap.insert(1, "1");
    multMap.insert(1, "2");
    multMap.insert(1, "3");
    multMap.insert(2, "4");
    multMap.insert(2, "5");
    multMap.insert(3, "6");
    multMap.insert(3, "7");
    multMap.insert(3, "8");

    QMultiMap<int, QString>::iterator iterNew = multMap.begin();

    while(iterNew != multMap.end())
    {
        line->append(QString(iterNew.value()));
        ++iterNew;
    }

Код:
Почему такой вывод, задом наперед?
3
2
1
5
4
8
7
6
Записан
mutineer
Гость
« Ответ #7 : Апрель 13, 2011, 10:07 »

Потому что мап использует внутри сортировку по ключу и порядок элементов с одинаковыми ключами не обязательно соответствует порядку их добавления
« Последнее редактирование: Апрель 13, 2011, 10:11 от mutineer » Записан
twp
Гость
« Ответ #8 : Апрель 13, 2011, 10:33 »

Читаем асистент внимательней:
Цитировать
The items that share the same key are available from most recently to least recently inserted.
« Последнее редактирование: Апрель 14, 2011, 16:17 от twp » Записан
dsp
Гость
« Ответ #9 : Апрель 13, 2011, 21:18 »

Все получилось, что задумывал. Осталось понять, как сделать что бы сортировка внутри map была не задом наперед для каждого ключа. Что тут может быть?

Не совсем понял
Цитировать
The items that share the same key are available from most recently to least recently inserted.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #10 : Апрель 14, 2011, 09:46 »

Все получилось, что задумывал. Осталось понять, как сделать что бы сортировка внутри map была не задом наперед для каждого ключа. Что тут может быть?

Не совсем понял
Цитировать
The items that share the same key are available from most recently to least recently inserted.
Просто "внутри" (в рамках одного ключа) элементы не сортируются  Улыбающийся
Если такая нужда есть, то проще расширить ключ или делать value как еще один QMap
Записан
dsp
Гость
« Ответ #11 : Апрель 14, 2011, 19:31 »

Да особой нужды нет, заморачиваться не буду. Просто получается, что все элементы одного ключа хранятся по типу стека?! Как раз последний пришел - первый ушел, вот и получается задом наперед вывод?!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.05 секунд. Запросов: 23.