大佬教程收集整理的这篇文章主要介绍了c – 从映射到向量的unique_copy元素值,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
#include <iostream> #include <map> #include <algorithm> #include <vector> #include <functional> using namespace std; using namespace placeholders; int main() { map<std::string,int> mp; mp["1"] = 1; mp["2"] = 2; mp["3"] = 3; mp["4"] = 3; mp["5"] = 3; mp["6"] = 4; mp["7"] = 2; vector<int> vec; unique_copy( mp.begin(),mp.end(),BACk_inserter(veC),bind(&map<std::string,int>::value_type::second,_1) ); for( auto& i : vec ) cout<< i <<" "; }
预期产量:
1 2 3 4 2@H_607_12@
您可以使用boost::transform_iterator
:@H_607_12@
auto getValue = [](const std::map<std::string,int>::value_type &pair) { return pair.second; }; unique_copy( boost::make_transform_iterator(mp.begin(),getvalue),boost::make_transform_iterator(mp.end(),BACk_inserter(veC) );
如果你不能使用Boost,你必须自己编写这样一个迭代器适配器:@H_607_12@
template <class T_PairIterator> struct SecondIterator { typedef T_PairIterator PairIterator; typedef typename std::iterator_Traits<PairIterator>::iterator_category iterator_category; typedef typename std::iterator_Traits<PairIterator>::value_type::second_type value_type; typedef typename std::iterator_Traits<PairIterator>::difference_type difference_type; typedef value_type *pointer; typedef value_type &reference; PairIterator it; SecondIterator() {} explicit SecondIterator(PairIterator it) : it(it) {} pointer operator-> () const { return &it->second; } reference operator* () const { return it->second; } SecondIterator& operator++ () { ++it; return *this; } SecondIterator operator++ (int) { SecondIterator ret(*this); ++it; return ret; } }; template <class T> bool operator== (const SecondIterator<T> &lhs,const SecondIterator<T> &rhs) { return lhs.it == rhs.it; } template <class T> bool operator!= (const SecondIterator<T> &lhs,const SecondIterator<T> &rhs) { return !(lhs == rhs); } template <class T> SecondIterator<T> makeSecondIterator(const T &it) { return SecondIterator<T>(it); }
然后你可以像这样使用它:@H_607_12@
unique_copy( makeSecondIterator(mp.begin()),makeSecondIterator(mp.end()),BACk_inserter(veC) );
当然,可以使适配器更通用(也可以首先使用),和/或更多封装(它不需要公开);它还需要对常量函数进行适当的处理.但上面应该足以让你有这个想法.@H_607_12@
以上是大佬教程为你收集整理的c – 从映射到向量的unique_copy元素值全部内容,希望文章能够帮你解决c – 从映射到向量的unique_copy元素值所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。