📄 map
字号:
::IsReadOnly::get
{ // test if read only
return (false);
}
};
virtual void CopyTo(_Mykvarray_t^ _Dest, int _First) sealed
= System::Collections::Generic::ICollection<_Mykvpair_t>::CopyTo
{ // copy to _Dest, beginning at _First
node_type^ _Node = head_node();
for (int _Idx = size(); 0 <= --_Idx; )
{ // copy back to front
_Node = _Node->prev_node();
_Dest[_First + _Idx] = _Mykvpair_t(_Node->_Value->first,
_Node->_Value->second);
}
}
virtual System::Collections::Generic::IEnumerator<_Mykvpair_t>^
GetEnumerator() sealed
= System::Collections::Generic::IEnumerable<_Mykvpair_t>
::GetEnumerator
{ // get enumerator for the container
return (gcnew TreeKVPEnumerator<
_Key_t, _Mapped_t, _Object_t^>(front_node()));
}
virtual void Add(_Mykvpair_t _Kvpair) sealed
= System::Collections::Generic::ICollection<_Mykvpair_t>::Add
{ // add element with value _Kvpair
insert_node(gcnew _Object_t(_Kvpair.Key, _Kvpair.Value));
}
virtual void Clear_dictionary() sealed
= System::Collections::Generic::ICollection<_Mykvpair_t>::Clear
{ // erase all elements
clear();
}
virtual bool Contains(_Mykvpair_t _Kvpair) sealed
= System::Collections::Generic::ICollection<_Mykvpair_t>::Contains
{ // search for element matching value _Kvpair
_Object_t^ _Val = gcnew _Object_t(_Kvpair.Key, _Kvpair.Value);
for (node_type^ _Node = front_node(); _Node != head_node();
_Node = _Node->next_node())
if (((System::Object^)_Val)->Equals(
(System::Object^)_Node->_Value))
return (true);
return (false);
}
virtual bool Remove(_Mykvpair_t _Kvpair) sealed
= System::Collections::Generic::ICollection<_Mykvpair_t>::Remove
{ // remove first element matching key _Keypair
for (node_type^ _Node = front_node(); _Node != head_node();
_Node = _Node->next_node())
if (((System::Object^)_Kvpair.Key)->Equals(
(System::Object^)_Node->_Value->first)
&& ((System::Object^)_Kvpair.Value)->Equals(
(System::Object^)_Node->_Value->second))
{ // found a match, remove it
erase_node(_Node);
return (true);
}
return (false);
}
};
//
// TEMPLATE CLASS multimap_base
//
template<typename _Key_t,
typename _Mapped_t,
bool _Is_ref_key,
bool _Is_ref_mapped>
ref class multimap_base
: public multimap_base0<_Key_t, _Mapped_t, _Is_ref_key, _Is_ref_mapped>,
System::Collections::Generic::ICollection<
_STLCLR GenericPair<_Key_t, _Mapped_t>^>,
System::Collections::Generic::IEnumerable<
_STLCLR GenericPair<_Key_t, _Mapped_t>^>
{ // ordered red-black tree of non-unique keys + values
public:
// types
typedef multimap_base<_Key_t, _Mapped_t, _Is_ref_key, _Is_ref_mapped>
_Mytype_t;
typedef multimap_base0<_Key_t, _Mapped_t, _Is_ref_key, _Is_ref_mapped>
_Mybase_t;
typedef _STLCLR GenericPair<_Key_t, _Mapped_t> _Object_t;
typedef _Key_t key_type;
typedef _Mapped_t mapped_type;
// typedef typename _Traits_t::value_type value_type;
// typedef typename _Traits_t::key_compare key_compare;
// typedef typename _Traits_t::value_compare value_compare;
// typedef int size_type;
// typedef int difference_type;
// typedef _Value_t value_type;
// typedef value_type% reference;
// typedef value_type% const_reference;
// typedef _Mycont_it generic_container;
// typedef value_type generic_value;
// typedef _STLCLR GenericPair<iterator^, bool> pair_iter_bool;
// typedef _STLCLR GenericPair<iterator^, iterator^> pair_iter_iter;
// basics
multimap_base()
: _Mybase_t()
{ // construct empty map from defaults
}
multimap_base(multimap_base% _Right)
: _Mybase_t((_Mybase_t%)_Right)
{ // construct by copying a list
}
multimap_base% operator=(multimap_base% _Right)
{ // assign
_Mybase_t::operator=(_Right);
return (*this);
}
// constructors
explicit multimap_base(key_compare^ _Pred)
: _Mybase_t(_Pred)
{ // construct empty map from comparator
}
template<typename _Iter_t>
multimap_base(_Iter_t _First, _Iter_t _Last)
: _Mybase_t()
{ // construct map from [_First, _Last), default comparator
for (; _First != _Last; ++_First)
insert((value_type)*_First);
}
template<typename _Iter_t>
multimap_base(_Iter_t _First, _Iter_t _Last, key_compare^ _Pred)
: _Mybase_t(_Pred)
{ // construct map from [_First, _Last), comparator
for (; _First != _Last; ++_First)
insert((value_type)*_First);
}
// mutators
iterator insert(value_type _Val)
{ // insert node with value _Val, return iterator
_Pairnb _Ans = insert_node(_Val);
return (make_iterator(_Ans.first));
}
iterator insert(iterator _Where, value_type _Val) new
{ // insert a key value, with hint
return (_Mybase_t::insert(_Where, _Val));
}
template<typename _Iter_t>
void insert(_Iter_t _First, _Iter_t _Last)
{ // insert [_First, _Last) one at a time
_Mybase_t::insert(_First, _Last);
}
void insert(_Myenum_it^ _Right) new
{ // insert enumerable
_Mybase_t::insert(_Right);
}
// interfaces
private:
property size_type Count_generic
{ // element count
virtual size_type get() sealed
= System::Collections::Generic::ICollection<_Value_t>
::Count::get
{ // get element count
return (size());
}
};
property bool IsReadOnly
{ // test if read only
virtual bool get() sealed
= System::Collections::Generic::ICollection<_Value_t>
::IsReadOnly::get
{ // test if read only
return (false);
}
};
virtual void CopyTo(_Myarray_t^ _Dest, int _First) sealed
= System::Collections::Generic::ICollection<_Value_t>::CopyTo
{ // copy to _Dest, beginning at _First
node_type^ _Node = head_node();
for (int _Idx = size(); 0 <= --_Idx; )
{ // copy back to front
_Node = _Node->prev_node();
_Dest[_First + _Idx] = _Node->_Value;
}
}
virtual System::Collections::Generic::IEnumerator<_Value_t>^
GetEnumerator() sealed
= System::Collections::Generic::IEnumerable<_Value_t>::GetEnumerator
{ // get enumerator for the container
return (gcnew _STLCLR TreeEnumerator<_Key_t, _Value_t>(
front_node()));
}
virtual void Add(value_type _Val) sealed
= System::Collections::Generic::ICollection<_Value_t>::Add
{ // add element with value _Val
insert_node(_Val);
}
virtual void Clear() sealed
= System::Collections::Generic::ICollection<_Value_t>::Clear
{ // erase all elements
clear();
}
virtual bool Contains(value_type _Val) sealed
= System::Collections::Generic::ICollection<_Value_t>::Contains
{ // search for element matching value _Val
for (node_type^ _Node = front_node(); _Node != head_node();
_Node = _Node->next_node())
if (((System::Object^)_Val)->Equals(
(System::Object^)_Node->_Value))
return (true);
return (false);
}
virtual bool Remove(value_type _Val) sealed
= System::Collections::Generic::ICollection<_Value_t>::Remove
{ // remove first element matching value _Val
for (node_type^ _Node = front_node(); _Node != head_node();
_Node = _Node->next_node())
if (((System::Object^)_Val->first)->Equals(
(System::Object^)_Node->_Value->first)
&& ((System::Object^)_Val->second)->Equals(
(System::Object^)_Node->_Value->second))
{ // found a match, remove it
erase_node(_Node);
return (true);
}
return (false);
}
};
//
// TEMPLATE CLASS multimap_select
//
template<typename _Key1_t,
typename _Mapped_t,
bool _Is_ref_key,
bool _Is_ref_mapped>
ref class multimap_select
: public multimap_base<_Key1_t, _Mapped_t, _Is_ref_key, _Is_ref_mapped>
{ // ordered red-black tree of non-unique keys + values
public:
// types
typedef _Key1_t _Gkey_t;
typedef _Mapped_t _Gmapped_t;
typedef multimap_select<_Key1_t, _Mapped_t, _Is_ref_key, _Is_ref_mapped>
_Mytype_t;
typedef multimap_base<_Gkey_t, _Gmapped_t, _Is_ref_key, _Is_ref_mapped>
_Mybase_t;
// typedef System::Collections::Generic::IEnumerable<_Value_t> _Myenum_it;
// typedef _STLCLR GenericPair<_Gkey_t, _Gmapped_t> _Object_t;
typedef _Key1_t key_type;
typedef _Mapped_t mapped_type;
// typedef typename _Traits_t::value_type value_type;
// typedef typename _Traits_t::key_compare key_compare;
// typedef typename _Traits_t::value_compare value_compare;
// typedef int size_type;
// typedef int difference_type;
// typedef _Value_t value_type;
// typedef value_type% reference;
// typedef value_type% const_reference;
// typedef _Mycont_it generic_container;
// typedef value_type generic_value;
// typedef _STLCLR GenericPair<iterator^, bool> pair_iter_bool;
// typedef _STLCLR GenericPair<iterator^, iterator^> pair_iter_iter;
// basics
multimap_select()
: _Mybase_t()
{ // construct empty map from defaults
}
multimap_select(multimap_select% _Right)
: _Mybase_t((_Mybase_t%)_Right)
{ // construct by copying a list
}
multimap_select% operator=(multimap_select% _Right)
{ // assign
_Mybase_t::operator=(_Right);
return (*this);
}
// constructors
explicit multimap_select(key_compare^ _Pred)
: _Mybase_t(_Pred)
{ // construct empty map from comparator
}
template<typename _Iter_t>
multimap_select(_Iter_t _First, _Iter_t _Last)
: _Mybase_t()
{ // construct map from [_First, _Last), default comparator
for (; _First != _Last; ++_First)
insert((value_type)*_First);
}
template<typename _Iter_t>
multimap_select(_Iter_t _First, _Iter_t _Last, key_compare^ _Pred)
: _Mybase_t(_Pred)
{ // construct map from [_First, _Last), comparator
for (; _First != _Last; ++_First)
insert((value_type)*_First);
}
// accessors
// property mapped_type default[key_type];
// converters
static value_type make_value(key_type _Key, mapped_type _Mapped)
{ // make a value_type
return (gcnew _Object_t(_Key, _Mapped));
}
// mutators
// virtual size_type erase(key_type _Keyval);
pair_iter_bool insert(cliext::pair<key_type, mapped_type> _Val)
{ // try to insert node with value _Val, return iterator
_Pairnb _Ans = insert_node(make_value(_Val.first, _Val.second));
return (pair_iter_bool(iterator(_Ans.first),
_Ans.second));
}
iterator insert(iterator _Where,
cliext::pair<key_type, mapped_type> _Val)
{ // insert a key value, with hint
return (_Mybase_t::insert(_Where,
make_value(_Val.first, _Val.second)));
}
// searches
// virtual iterator find(key_type _Keyval);
// virtual size_type count(key_type _Keyval);
// virtual iterator lower_bound(key_type _Keyval);
// virtual iterator upper_bound(key_type _Keyval);
// virtual pair_iter_iter equal_range(key_type _Keyval);
};
//
// TEMPLATE CLASS multimap_select: _Mapped_t REF SPECIALIZATION
//
template<typename _Key1_t,
typename _Mapped_t>
ref class multimap_select<_Key1_t, _Mapped_t, false, true>
: public multimap_base<_Key1_t, _Mapped_t^, false, true>
{ // ordered red-black tree of non-unique keys + values
public:
// types
typedef _Key1_t _Gkey_t;
typedef _Mapped_t^ _Gmapped_t;
typedef multimap_select<_Key1_t, _Mapped_t, false, true> _Mytype_t;
typedef multimap_base<_Gkey_t, _Gmapped_t, false, true>
_Mybase_t;
// typedef System::Collections::Generic::IEnumerable<_Value_t> _Myenum_it;
typedef _STLCLR GenericPair<_Gkey_t, _Gmapped_t> _Object_t;
typedef _Key1_t key_type;
typedef _Mapped_t mapped_type;
// typedef typename _Traits_t::value_type value_type;
// typedef typename _Traits_t::key_compare key_compare;
// typedef typename _Traits_t::value_compare value_compare;
// typedef int size_type;
// typedef int difference_type;
// typedef _Value_t value_type;
// typedef value_type% reference;
// typedef value_type% const_reference;
// typedef _Mycont_it generic_container;
// typedef value_type generic_value;
// typedef _STLCLR GenericPair<iterator^, bool> pair_iter_bool;
// typedef _STLCLR GenericPair<iterator^, iterator^> pair_iter_iter;
// basics
multimap_select()
: _Mybase_t()
{ // construct empty map from defaults
}
multimap_select(multimap_select% _Right)
: _Mybase_t((_Mybase_t%)_Right)
{ // construct by copying a list
}
multimap_select% operator=(multimap_select% _Right)
{ // assign
_Mybase_t::operator=(_Right);
return (*this);
}
// constructors
explicit multimap_select(key_compare^ _Pred)
: _Mybase_t(_Pred)
{ // construct empty map from comparator
}
template<typename _Iter_t>
multimap_select(_Iter_t _First, _Iter_t _Last)
: _Mybase_t()
{ // construct map from [_First, _Last), default comparator
for (; _First != _Last; ++_First)
insert((value_type)*_First);
}
template<typename _Iter_t>
multimap_select(_Iter_t _First, _Iter_t _Last, key_compare^ _Pred)
: _Mybase_t(_Pred)
{ // construct map from [_First, _Last), comparator
for (; _First != _Last; ++_First)
insert((value_type)*_First);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -