Russian Qt Forum

Qt => Общие вопросы => Тема начата: fender от Ноябрь 09, 2018, 11:12



Название: [РЕШЕНО] QMap и std::map - вывести значение
Отправлено: fender от Ноябрь 09, 2018, 11:12
Добрый день.
Исходные данные следующие:
строка вида - CYA-30-50V2 // вместо V2 могут быть другие буквы
каждая буква/цифра имеется расшифровку
необходимо чтобы функция прошлась по строке, сравнила данные с "данными по умолчанию" и вывела расшифровку
Решил делать через std::map
Код:
std::map <QString, QString> myFirstMap = {{ "", "Модификация 1." },
                             { "V", "Модификация 2." },
                             { "V2", "Модификация 3." },
                             { "D", "Модификация 4." }};

QString dataReturn()
{
    for (auto it = myFirstMap.begin(); it != myFirstMap.end(); ++it)
    {
        if (myFirstMap.begin()->first==data[2]) // data[2] - это аргумент строки
            myFirstMap.begin()->second;
    }
}
А дальше функция генерации отчета
Код:
    const QString texts[12]=
    {
"",
        "", // 2
"",
"",
"",
"",
"",
    };

    for(int i=0; i<12; ++i)
    {
        QString description;
        switch(i)
        {
        case 0: case 1: case 5:  case 6:  case 7:
        case 9: case 10:
        {

            if(!data_[i].isEmpty())
                description = texts[i];
            else
                continue;
        }
            break;
        case 2:
dataReturn(); // вызов функции, которая должна вернуть  значение myFirstMap.begin()->second из map
        {



Название: Re: QMap и std::map - вывести значение
Отправлено: kambala от Ноябрь 09, 2018, 16:29
а вопрос-то в чем?


Название: Re: QMap и std::map - вывести значение
Отправлено: fender от Ноябрь 12, 2018, 09:38
а вопрос-то в чем?
после сравнения с элементом строки необходимо вывести соответствующую расшифровку
поэтому вопрос: как правильно это сделать, где у меня ошибка?


Название: Re: QMap и std::map - вывести значение
Отправлено: kambala от Ноябрь 12, 2018, 12:59
сама функция должна выглядеть так:
Код
C++ (Qt)
for (auto it = myFirstMap.begin(); it != myFirstMap.end(); ++it)
{
   if (it->first == data[2]) // data[2] - это аргумент строки
       return it->second;
}
return QString();
хотя откуда берется эта data, не совсем понятно...

также не знаю что там за комментарий «2» в texts[12], но индекс у указанного элемента равен 1, а не 2. А в case 2 не хватает break, иначе switch «провалится» в следующий case.


Название: Re: QMap и std::map - вывести значение
Отправлено: fender от Ноябрь 12, 2018, 14:11
сама функция должна выглядеть так:
Код
C++ (Qt)
for (auto it = myFirstMap.begin(); it != myFirstMap.end(); ++it)
{
   if (it->first == data[2]) // data[2] - это аргумент строки
       return it->second;
}
return QString();
хотя откуда берется эта data, не совсем понятно...

также не знаю что там за комментарий «2» в texts[12], но индекс у указанного элемента равен 1, а не 2. А в case 2 не хватает break, иначе switch «провалится» в следующий case.

Вроде решил проблему так
Код:
QString dataReturn(QString data, std::map <QString, QString> &Map)
{
    for (auto it = Map.begin(); it != Map.end(); ++it)
    {
        if (it->first==data)
            return it->second;
    }
}
            description = dataReturn(data_[4], myThirdMap); // вызов функции
и при вызове функции уже в параметры указываю необходимый элемент строки и нужную std::map


Название: Re: QMap и std::map - вывести значение
Отправлено: Igors от Ноябрь 12, 2018, 18:43
сама функция должна выглядеть так:
Код
C++ (Qt)
for (auto it = myFirstMap.begin(); it != myFirstMap.end(); ++it)
{
   if (it->first == data[2]) // data[2] - это аргумент строки
       return it->second;
}
return QString();
Общаясь с начинающими мы начинаем видеть мир их глазами - и это совсем не шлифовка нашего мастерства  :)


Название: Re: QMap и std::map - вывести значение
Отправлено: Old от Ноябрь 12, 2018, 21:04
и это совсем не шлифовка нашего мастерства  :)
Это из-за того, что ваше "мастерство" уже нечем шлифовать. :)


Название: Re: QMap и std::map - вывести значение
Отправлено: kambala от Ноябрь 13, 2018, 01:18
сама функция должна выглядеть так:
Код
C++ (Qt)
for (auto it = myFirstMap.begin(); it != myFirstMap.end(); ++it)
{
   if (it->first == data[2]) // data[2] - это аргумент строки
       return it->second;
}
return QString();
Общаясь с начинающими мы начинаем видеть мир их глазами - и это совсем не шлифовка нашего мастерства  :)
ну кстати да... :D
Код
C++ (Qt)
QString dataReturn(const QString &data, const std::map<QString, QString> &Map)
{
   auto it = Map.find(data);
   return it != Map.end() ? it->second : QString();
}

я в начале темы увидел, что сравнение идет по концу строки, а не по всей, и дальше вообще этот == не видел в коде :)