Диапазон на основе пары C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Диапазон на основе пары

Сообщение Anonymous »

У меня есть вопрос по поводу следующего ответа:

https://stackoverflow.com/a/15828866/2160256

Как сказано там, мы не можем использовать диапазон, основанный на BGL, вот так:

for(auto e : boost::edges(g))
// do something with e


Однако здесь говорится, что мы можем перегрузить функции Begin() и End(), которые необходимы для использования диапазона на основе семантики. Итак, я попробовал:

template
I begin(std::pair& p)
{ return p.first;}

template
I end(std::pair& p)
{ return p.second;}


Однако компилятор по-прежнему жалуется:


ошибка: нет функции сопоставления для позвони
'begin(std::pair&)’


Что я делаю не так? Поиск по имени не работает? Или это все-таки невозможно?
Я также нашел этот ответ, который работает, но разве это не должно быть возможно и с оверлодингами свободных функций начала/конца?
С уважением, Марти

Кстати: мне очень утомительно писать

typename Graph::edge_iterator ebegin, eend;
std::tie(ebegin,eend) = boost::edges(_graph);
std::for_each(ebegin,eend,[&](const edge_descriptor& e){/*do something with e*/;});


ОБНОВЛЕНИЕ: C++17 теперь должен позволять следующее :-)

auto [ebegin,eend] = boost::edges(_graph);


Подробнее здесь: https://stackoverflow.com/questions/271 ... r-iterator
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»