Автоматизация между контейнерами разных объектов с назначением копирования

У меня редкий вектор типа 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.

3

Решение

Переписать ответ, чтобы помочь сообществу

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]