Ошибка с функцией map. C++

202
20 декабря 2017, 22:30

Здравствуйте. Выдает непонятную ошибку, как исправить? Скриншот: Вот исходный код:

string translator(string x, int language) {
    string Return;
    map <char, char> mapEng{{ 'q', 'й' },{ 'w', 'ц' },{ 'e', 'у' },{ 'r', 'к' },{ 't', 'е' },{ 'y', 'н' },{ 'u', 'г' },{ 'i', 'ш' },{ 'o', 'щ' },{ 'p', 'з' },{ 't', 'е' },{ '[', 'х' },{ ']', 'ъ' },
    { 'a', 'ф' },{ 's', 'ы' },{ 'd', 'в' },{ 'f', 'а' },{ 'g', 'п' },{ 'h', 'р' },{ 'j', 'о' },{ 'k', 'л' },{ 'l', 'д' },{ ';', 'ж' },{ '\'', 'э' },{ '\\', '\\' },
    { 'z', 'я' },{ 'x', 'ч' },{ 'c', 'с' },{ 'v', 'м' },{ 'b', 'и' },{ 'n', 'т' },{ 'm', 'ь' },{ ',', 'б' },{ '.', 'ю' },{ '/', '.' } };
    switch (language) {
    case 1:
        for (int i = 0; i < x.length(); i++) {
            char a = mapEng.find(x[i]);
            Return += a;
        }
    case 2: break;
    }
}
Answer 1

То, что вы пытаетесь получить, предоставляет метод at, а не метод find. Т.е. не

char a = mapEng.find(x[i]);

а

char a = mapEng.at(x[i]);

Надо только помнить, что в случае, когда x[i] отсутствует в mapEng, будет выброшено исключение. Устраивает это вас или нет - вам решать, ибо из вашего кода не ясно, что вы планируете делать в таких ситуациях.

Answer 2

как уже сказали в комментариях, результат mapEng.find() нужно сохранить в итератор

правильный вариант:

string translator(string x, int language) {
    string Return;
    map <char, char> mapEng{...};
    switch (language) {
    case 1:
        for (int i = 0; i < x.length(); i++) {
            map <char, char>::const_iterator a = mapEng.find(x[i]);
            Return += a->second;
        }
    case 2: break;
    }
}
READ ALSO
Найти количество пар чисел с заданным НОК

Найти количество пар чисел с заданным НОК

У меня есть число N - наименьшее общее кратное двух чисел a и b

249
Заголовочные файлы Windows

Заголовочные файлы Windows

Что нужно поставить, что бы получить доступ к заголовочным файлам?

163
SFML C++ Cчетчик нажатий клавиши

SFML C++ Cчетчик нажатий клавиши

При нажатии enter счетчик int am увеличивается на 1 ;

236