大家好,能告訴我爲什麼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