Я наткнулся на следующий странно выглядящий фрагмент кода онлайн (упрощенно).
#include <iostream>
#include <set>
using namespace std;
int main() {
set<int> myset{1, 2, 3, 4, 5};
set<int, int>::iterator it = myset.begin();
cout << *it << endl;
return 0;
}
Я только что проверил , это компилируется и запускается . (выводится 1
при выполнении)
Я не понимаю определения типа итератора.
Определение myset
как set<int, int> myset;
недопустимо в качестве второго необязательного параметра шаблона set
объявление типа должно быть компаратором, поддерживающим bool operator()(int& const lhs, int& const rhs) const
.
Но почему определение итератора не терпит неудачу? Разве его базовый контейнер не должен иметь тот же тип, что и целевой контейнер?