大家好,能告诉我为什么VS2010会给我一个这段代码的错误,我看不出有什么问题?有关std :: transform的疑惑 - 将std :: map的value_type :: second转换为std :: vector
错误代码:错误C2679:二进制“=”:没有操作员发现这需要类型的右边的操作数“的std ::矢量< _Ty>”(或没有可接受的转化率)
// Elements container
typedef std::vector<CFVFElementPtr> ElementArray;
typedef std::map<CVertexSemantic::Type, ElementArray> ElementsMap;
// Create an empty array of elements
ElementsMap::value_type::second_type allElements;
// Concatinate each std::vector found within the map
std::transform(m_elementsMap.begin(), m_elementsMap.end(),
std::insert_iterator<ElementArray>(allElements, allElements.end()),
select2nd<ElementsMap::value_type>());
所有我试图做的是
for (auto i = m_elementsMap.begin(); i != m_elementsMap.end(); ++i)
{
const ElementArray& elements = (*i).second;
allElements.insert(allElements.end(), elements.begin(), elements.end());
}
至于巴勃罗的回应,我想创造一个接受的ElementArray
数组的自定义迭代器,但现在我得到错误的水桶负荷。
template < class Container >
class container_insert_interator
{
public:
typedef container_insert_interator<Container> this_type;
typedef Container container_type;
typedef typename Container::const_reference const_reference;
typedef typename Container::value_type valty;
explicit container_insert_interator (Container& cont, typename Container::iterator iter)
: container(&cont), iter(iter)
{ }
this_type& operator = (typename const_reference value)
{
iter = container->insert(iter, std::begin(value), std::end(value));
++iter;
return *this;
}
this_type& operator*()
{
return *this;
}
this_type& operator++()
{
return *this;
}
this_type operator++ (int)
{
return *this;
}
protected:
Container* container; // pointer to container
typename Container::iterator iter ; // iterator into container
};
柜面你想知道什么[select2nd](http://www.sgi.com /tech/stl/select2nd.html),它只是返回std :: map。第二个std :: map的value_type。 –
Sent1nel
2012-03-21 02:11:03