forked from boostorg/unordered
Merge between set/multiset and map/multimap
This commit is contained in:
@@ -39,6 +39,9 @@ template <class T, class H, class P, class A> class unordered_set
|
||||
#if defined(BOOST_UNORDERED_USE_MOVE)
|
||||
BOOST_COPYABLE_AND_MOVABLE(unordered_set)
|
||||
#endif
|
||||
template <typename, typename, typename, typename>
|
||||
friend class unordered_multiset;
|
||||
|
||||
public:
|
||||
typedef T key_type;
|
||||
typedef T value_type;
|
||||
@@ -393,14 +396,21 @@ template <class T, class H, class P, class A> class unordered_set
|
||||
|
||||
template <typename H2, typename P2>
|
||||
void merge(boost::unordered_set<T, H2, P2, A>& source);
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
template <typename H2, typename P2>
|
||||
void merge(boost::unordered_set<T, H2, P2, A>&& source);
|
||||
#endif
|
||||
// template <typename H2, typename P2>
|
||||
// void merge(boost::unordered_multiset<T,H2,P2,A>& source);
|
||||
// template <typename H2, typename P2>
|
||||
// void merge(boost::unordered_multiset<T,H2,P2,A>&& source);
|
||||
|
||||
#if BOOST_UNORDERED_INTEROPERABLE_NODES
|
||||
template <typename H2, typename P2>
|
||||
void merge(boost::unordered_multiset<T, H2, P2, A>& source);
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
template <typename H2, typename P2>
|
||||
void merge(boost::unordered_multiset<T, H2, P2, A>&& source);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// observers
|
||||
|
||||
@@ -486,6 +496,9 @@ template <class T, class H, class P, class A> class unordered_multiset
|
||||
#if defined(BOOST_UNORDERED_USE_MOVE)
|
||||
BOOST_COPYABLE_AND_MOVABLE(unordered_multiset)
|
||||
#endif
|
||||
template <typename, typename, typename, typename>
|
||||
friend class unordered_set;
|
||||
|
||||
public:
|
||||
typedef T key_type;
|
||||
typedef T value_type;
|
||||
@@ -830,14 +843,21 @@ template <class T, class H, class P, class A> class unordered_multiset
|
||||
|
||||
template <typename H2, typename P2>
|
||||
void merge(boost::unordered_multiset<T, H2, P2, A>& source);
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
template <typename H2, typename P2>
|
||||
void merge(boost::unordered_multiset<T, H2, P2, A>&& source);
|
||||
#endif
|
||||
// template <typename H2, typename P2>
|
||||
// void merge(boost::unordered_set<T,H2,P2,A>& source);
|
||||
// template <typename H2, typename P2>
|
||||
// void merge(boost::unordered_set<T,H2,P2,A>&& source);
|
||||
|
||||
#if BOOST_UNORDERED_INTEROPERABLE_NODES
|
||||
template <typename H2, typename P2>
|
||||
void merge(boost::unordered_set<T, H2, P2, A>& source);
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
template <typename H2, typename P2>
|
||||
void merge(boost::unordered_set<T, H2, P2, A>&& source);
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// observers
|
||||
|
||||
@@ -1163,6 +1183,26 @@ void unordered_set<T, H, P, A>::merge(
|
||||
}
|
||||
#endif
|
||||
|
||||
#if BOOST_UNORDERED_INTEROPERABLE_NODES
|
||||
template <class T, class H, class P, class A>
|
||||
template <typename H2, typename P2>
|
||||
void unordered_set<T, H, P, A>::merge(
|
||||
boost::unordered_multiset<T, H2, P2, A>& source)
|
||||
{
|
||||
table_.merge_impl(source.table_);
|
||||
}
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
template <class T, class H, class P, class A>
|
||||
template <typename H2, typename P2>
|
||||
void unordered_set<T, H, P, A>::merge(
|
||||
boost::unordered_multiset<T, H2, P2, A>&& source)
|
||||
{
|
||||
table_.merge_impl(source.table_);
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// lookup
|
||||
|
||||
template <class T, class H, class P, class A>
|
||||
@@ -1522,6 +1562,30 @@ void unordered_multiset<T, H, P, A>::merge(
|
||||
}
|
||||
#endif
|
||||
|
||||
#if BOOST_UNORDERED_INTEROPERABLE_NODES
|
||||
template <class T, class H, class P, class A>
|
||||
template <typename H2, typename P2>
|
||||
void unordered_multiset<T, H, P, A>::merge(
|
||||
boost::unordered_set<T, H2, P2, A>& source)
|
||||
{
|
||||
while (!source.empty()) {
|
||||
insert(source.extract(source.begin()));
|
||||
}
|
||||
}
|
||||
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
template <class T, class H, class P, class A>
|
||||
template <typename H2, typename P2>
|
||||
void unordered_multiset<T, H, P, A>::merge(
|
||||
boost::unordered_set<T, H2, P2, A>&& source)
|
||||
{
|
||||
while (!source.empty()) {
|
||||
insert(source.extract(source.begin()));
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// lookup
|
||||
|
||||
template <class T, class H, class P, class A>
|
||||
|
Reference in New Issue
Block a user