這應該工作:
std::for_each(mybimap.left.begin(),
mybimap.left.end(),
boost::bind(&vector_type::push_back, &myvec,
boost::bind(&map_type::left_map::value_type::second, _1)));
...或者,如果你的意思是映射從替代值映射到鍵值,使用first
代替second
。
編輯:我覺得這雙綁定相當笨拙,並且for_each
非優化算法(copy
會更適合,恕我直言算法名稱應說明意圖,並在這裏,顯然是一個副本)。你也可以使用這裏transform iterator:
std::copy(boost::make_transform_iterator(mybimap.left.begin(), select_second()),
boost::make_transform_iterator(mybimap.left.end(), select_second()),
std::back_inserter(myvec));
其中select_second
將是一個函數對象,選擇對的第二個元素 - 或者只是boost::bind(&map_type::left_map::value_type::second, _1)
。
對於一個情況,我無法用一個transform_iterator
我已經寫在這基本上是一個back_inserter
這需要被寫入之前應用於元素(沒有火箭科學寫)的一元函數工作transform_back_inserter
- 那麼它看起來像
std::copy(mybimap.left.begin(),
mybimap.left.end(),
transform_back_inserter(myvec, select_second()));
,我更願意到transform_iterator
時儘可能我沒有重複一元函數的名稱。
它不工作,因爲...(把錯誤描述在這裏)? – liori 2009-09-04 15:01:48