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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [РЕШЕНО] QMap и std::map - вывести значение  (Прочитано 6231 раз)
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
        {

« Последнее редактирование: Ноябрь 13, 2018, 08:11 от fender » Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Ноябрь 09, 2018, 16:29 »

а вопрос-то в чем?
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
fender
Гость
« Ответ #2 : Ноябрь 12, 2018, 09:38 »

а вопрос-то в чем?
после сравнения с элементом строки необходимо вывести соответствующую расшифровку
поэтому вопрос: как правильно это сделать, где у меня ошибка?
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #3 : Ноябрь 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.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
fender
Гость
« Ответ #4 : Ноябрь 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
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Ноябрь 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();
Общаясь с начинающими мы начинаем видеть мир их глазами - и это совсем не шлифовка нашего мастерства  Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Ноябрь 12, 2018, 21:04 »

и это совсем не шлифовка нашего мастерства  Улыбающийся
Это из-за того, что ваше "мастерство" уже нечем шлифовать. Улыбающийся
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #7 : Ноябрь 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();
Общаясь с начинающими мы начинаем видеть мир их глазами - и это совсем не шлифовка нашего мастерства  Улыбающийся
ну кстати да... Веселый
Код
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();
}

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

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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