BadCats
@BadCats

Использование и обращение к std::pair в std::map?

Допустим, есть map - вот такого вида:
map<string,pair<int,int>> operators_sw_map; //use in initialize method

есть метод, в котором происходит инициализация этого map:
void Initialize()
{ //второй параметр в pair - отвечает за приоритет операции
    //чем больше число - тем выше приоритет
    //0 - бинарная операция
    //1 - унарная операция
    //2  - блок скобок
    operators_sw_map["&&"]=make_pair(0,0);
    operators_sw_map["||"]=make_pair(1,0);
    operators_sw_map["!"]=make_pair(2,1);
    operators_sw_map["->"]=make_pair(3,0);
    operators_sw_map["<-"]=make_pair(4,0);
    operators_sw_map["<->"]=make_pair(5,0);
    operators_sw_map["XOR"]=make_pair(6,0);
    operators_sw_map["("]=make_pair(7,2);
    operators_sw_map[")"]=make_pair(8,2);
}


Далее, я использую этот map в switch:
map<string,pair<int,int>>::iterator it= operators_sw_map.find(oper_statement[i]);//ищем оператор


           if (oper_statement[i]=="!") {
               unar_operations=1;

           }

           else  {
               unar_operations=0;
           }
           // проходимся по сгенерированной таблице
           for (int j = 0; j < statement.size(); ++  j) {// столбец

               for (int d = 0; d < LogicalTable[j].size(); d++) { //строка

                   switch (it->second) {
                   case 0: //&&
                   {
// .....

Вопрос:
как вот здесь - switch (it->second)
обратиться к первому элементу std::pair - который, в свою очередь - является ключем в map ?
  • Вопрос задан
  • 1066 просмотров
Решения вопроса 1
maaGames
@maaGames
Погроммирую программы
it->first; // string
it->second; // pair<int,int>
it->second.first; // первый int
it->second.second; //второй int
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@vanyamba-electronics
switch вряд ли примет строку в качестве критерия. Придётся сделать примерно так:
typedef enum {
	Operation_AND,
	Operation_OR,
	Operation_NOT,
	...
} Operation_Key;

map<Operation_Key, pair<int, int>> operators_sw_map; //use in initialize method

switch(it->first) 
{
case Operation_AND:
	...
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы