2013-03-18 3 views
1

Есть ли способ, которым я могу использовать boost :: bind to 'bind' значение набора ключей при выполнении вставки итератора? По сути, я хочу перебирать набор ключей и вставлять их в карту с заданным значением.C Map insert iterator bind

map<int, int> mymap; 
set<int> myset; 
myset.insert(1); 
myset.insert(2); 
myset.insert(3); 
.... 
myset.insert(100); 


for_each(myset.begin(), myset.end(), boost::bind(&mymap.insert,_1, 5); //Should be some make_pair() in here, but not sure how to make this work 
+0

Что вы хотите достичь? Сопоставьте все числа до 5? –

+0

Да, точно. Я знаю, что могу прокручивать, но искал более чистый один лайнер. – Brian

ответ

1

Да, это возможно, но вы будете недовольны этим.

Это будет выглядеть так:

std::for_each(
     myset.begin() 
    , myset.end() 
    , std::bind(
      &map<int, int>::insert 
     , &mymap 
     , std::bind(
       std::make_pair<int, int> 
       , std::bind(
        &std::set<int>::iterator::operator* 
        , std::placeholders::_1 
       ) 
       , 5 
      ) 
     ) 
    ); 

(не проверял это код)

+0

О, дорогой. Подход с одним лайнером намного сложнее, чем я себе представлял. Спасибо! – Brian

+1

Не работает, поскольку вы не можете привязать перегруженные функции. – inf

+0

@bamboon вы можете, но вы должны отдать их в форму, которой вы пользуетесь. –