簡體   English   中英

具有復制分配的不同對象的容器之間的自動化

[英]Automation between containers of different objects with copy assign

我有一個類型為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::map<I,T> ,它有作為元素std::pair<I,T> ,我想要一個解決方案而不改變'index'和'value'成員SparseElement:

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.

重寫答案以幫助社區

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); }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM