2013-03-21 91 views
3

我有std::vector<SparseElement<T,I>>類型的稀疏矢量其中SparseElement是:自動化分配

template<typename T, typename I = unsigned int> 
struct SparseElement 
{ 
    I index; 
    T value; 
    //............ 
    SparseElement &operator=(const std::pair<I,T> &pair); 
} 

因爲我使用用於填充稀疏矢量具有作爲元素std::pair<I,T>一個std::map<I,T>,我想

std::pair<I,T> a; 
SparseElement<T,I> b; 
b = a; // This is OK! 
a = b; // Is there a solution on this problem? 
// on containers: 
std::vector<SparseElement<T,I>> vec; 
std::map<I,T> m(vec.begin(), vec.end()); // Not working. 
vec.assign(m.begin(), m.end()); // Working. 
+0

'A = B;''也許模板的std ::對運算符=(對 LHS,SparseElement 常量& SE);'作爲遊離功能。 – RedX 2013-03-21 12:52:39

+0

@RedX - 不,我也爲此而墮落。 'operator ='必須是由標準定義的非靜態成員函數。 – 2013-03-21 12:53:29

+0

@KirilKirov Dang,如果可能的話,本來會很好。 – RedX 2013-03-21 12:54:12

回答

0

重寫的答案,幫助社區

:在不改變「索引」和SparseElement的「價值」的成員在一個解決方案
template<typename T, typename I = unsigned int> 
struct SparseElement 
{ 
    //.......... 
    I index;    //!< Index of element in vector 
    T value;    //!< Value of element 
    //.......... 
    //! Template copy constructor from a different type of \p std::pair 
    //! This is useful for conversion from MapVector to SparseVector 
    template<typename T2, typename I2> 
    SparseElement(const std::pair<I2,T2> &s) : index(s.first), value(s.second) {} 
    //.......... 
    //! Template copy assign from a different type of \p std::pair 
    //! This is useful for conversion from MapVector to SparseVector 
    template<typename T2, typename I2> 
    SparseElement &operator=(const std::pair<I2,T2> &s) { index = s.first; value = s.second; return *this; } 

    //! Implicit conversion from SparseElement to a \p std::pair 
    //! This is useful for conversion from SparseVector to MapVector 
    operator std::pair<const I,T>() { return std::pair<const I,T>(index, value); } 
};