p
будет итератором std::pair<const int, double>
, так что вы действительно хотите p->first
. Я не думаю, что GDB хорошо обрабатывает перегруженные операторы, поэтому вам, вероятно, понадобится p.
{некоторый член, представляющий объект pair
} .first
. Существует документация Doxygen для libstdc ++, так что вы можете определить, какой элемент вам нужен, в данном случае он выглядит как ((_Rb_tree_node<pair<const int, double> >*)(p._M_node))-> _M_value_field.first
. Поскольку это довольно многословно, я бы проверил, работает ли перегрузка операторов в первую очередь (и нет, я не думаю, что есть что-то попроще, извините). Вы также можете попробовать явно вызывать операторы, но я не думаю, что gcc может сделать это либо (например, it.operator*().first
).
РЕДАКТИРОВАТЬ: подождите, публикация litb, кажется, показывает, что gcc поддерживает перегрузки операторов при *. Странно, я всегда обнаруживал, что это не работает!