Проблема при работе с русскими символами (wchar_t)

Я пытаюсь создать ассоциативный массив с русскими символами в качестве ключей.
Например, мы вводим символ из консоли и хотим по нему найти поле в массиве. Однако, при попытке обнаружить символ 'б', считанный из стандартного потока при помощи wcin, мы получим 0. Но при поиске по L'б' мы получаем успешный результат (т.е. "ББББ").

#include <iostream>
#include <map>

using namespace std;

int main(){
    wchar_t c;
    map<wchar_t, const char*> alphabet = {
       {L'а', "АААА"},
       {L'б', "ББББ"}
    };
    wcin >> c; //Введем символ 'б'
    cout << alphabet.find(c) -> second << endl; //Напечатает: 0
    cout << alphabet.find(L'б') -> second << endl; //Напечатает: ББББ
    return 0;
}

Я пробовал заменить wcin на wscanf(L"%lc", &c), но это не принесло результата.
Помимо этого, я попробовал привести переменную c и символ L'б' к int и вот что получил:

cout << static_cast<int>(c) << " " << static_cast<int>(L'б') << endl;
//Вывод: 208 1073

Файл сохранен в UTF-8. В терминале установлена та же самая кодировка.
Операционная система Mac OS, компилятор g++.


Ответы (2 шт):

Автор решения: miha barinov
#include <iostream>
#include <map>
using namespace std;

int main(){
setlocale(LC_ALL, "Rus");
//дальше код, та строка меняет на кодировку на русскую
}

Насколько я понял нужно просто установить русскую кодировку. Кстати можешь на ютубе найти канал SimpleCode. Там есть очень подробные уроки по C++, а также сейчас регулярно выходят уроки по C#.

→ Ссылка
Автор решения: AlexGlebe

Использовать можно потоки cout XOR wcout - одновременно они конфликтуют. Задавать нужно локаль. Буквы вы записали в char чтобы выводить в cout. Так как нужно выводить только в wcout, тогда нужно выводить L"АААА". Не забывать нужно проверять успешность поиска в map. Со всеми исправлениями вот что получилось:

// g++ -Wall -std=c++11 wcin.cpp -o wcin
#include <iostream>
#include <map>
#include <locale>

using namespace std;

int main(){
  setlocale(LC_ALL,"");
    wchar_t c;
    map<wchar_t, const wchar_t * > alphabet = {
       {L'а', L"АААА"},
       {L'б', L"ББББ"}
    };
    wcin >> c; //Введем символ 'а'
    auto  it = alphabet.find(c);
    if(it == alphabet.end())
      wcout << L"1.Записи нет\n";
    else
      wcout << it -> second << endl; //Напечатает: АААА
    it = alphabet.find(L'б');  
    if(it == alphabet.end())  
      wcout << L"2.Записи нет\n";
    else
      wcout << it -> second << endl; //Напечатает: ББББ
    return 0;
    }
→ Ссылка