Russian Qt Forum

Qt => Вопросы новичков => Тема начата: dsp от Апрель 12, 2011, 19:41



Название: Как в QMultiMap определять количество одинаковых ключей?
Отправлено: 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();

}



Название: Re: Как в QMultiMap определять количество одинаковых ключей?
Отправлено: Пантер от Апрель 12, 2011, 20:23
int QMap::count ( const Key & key ) const же. Читай ассистент.


Название: Re: Как в QMultiMap определять количество одинаковых ключей?
Отправлено: dsp от Апрель 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



Название: Re: Как в QMultiMap определять количество одинаковых ключей?
Отправлено: Пантер от Апрель 12, 2011, 20:38
line->setPlainText(QString::number(multMap.count(counter)));


Название: Re: Как в QMultiMap определять количество одинаковых ключей?
Отправлено: dsp от Апрель 12, 2011, 20:40
Спасибо, про ::number я ни ухом ни рылом...


Название: Re: Как в QMultiMap определять количество одинаковых ключей?
Отправлено: dsp от Апрель 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;
    }


но не работает...


Название: Re: Как в QMultiMap определять количество одинаковых ключей?
Отправлено: dsp от Апрель 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


Название: Re: Как в QMultiMap определять количество одинаковых
Отправлено: mutineer от Апрель 13, 2011, 10:07
Потому что мап использует внутри сортировку по ключу и порядок элементов с одинаковыми ключами не обязательно соответствует порядку их добавления


Название: Re: Как в QMultiMap определять количество одинаковых ключей?
Отправлено: twp от Апрель 13, 2011, 10:33
Читаем асистент внимательней:
Цитировать
The items that share the same key are available from most recently to least recently inserted.


Название: Re: Как в QMultiMap определять количество одинаковых ключей?
Отправлено: dsp от Апрель 13, 2011, 21:18
Все получилось, что задумывал. Осталось понять, как сделать что бы сортировка внутри map была не задом наперед для каждого ключа. Что тут может быть?

Не совсем понял
Цитировать
The items that share the same key are available from most recently to least recently inserted.


Название: Re: Как в QMultiMap определять количество одинаковых ключей?
Отправлено: Igors от Апрель 14, 2011, 09:46
Все получилось, что задумывал. Осталось понять, как сделать что бы сортировка внутри map была не задом наперед для каждого ключа. Что тут может быть?

Не совсем понял
Цитировать
The items that share the same key are available from most recently to least recently inserted.
Просто "внутри" (в рамках одного ключа) элементы не сортируются  :)
Если такая нужда есть, то проще расширить ключ или делать value как еще один QMap


Название: Re: Как в QMultiMap определять количество одинаковых ключей?
Отправлено: dsp от Апрель 14, 2011, 19:31
Да особой нужды нет, заморачиваться не буду. Просто получается, что все элементы одного ключа хранятся по типу стека?! Как раз последний пришел - первый ушел, вот и получается задом наперед вывод?!