multimap简介
与map类似,但是允许不同的mapped_value拥有相同的key_value,实际应用,一个人拥有多个QQ、邮箱、电话号码等
与map的区别在于,insert()一定会插入值;erase(element_value)即version 1,会删除所有相同元素值的元素
multimap模板
template < class Key, class T, class Compare = less<Key>,
class Allocator = allocator<pair<const Key,T> > > class multimap;
constructor
1.explicit multimap ( const Compare& comp = Compare(),
const Allocator& = Allocator() );
2.template <class InputIterator>
multimap ( InputIterator first, InputIterator last,
const Compare& comp = Compare(), const Allocator& = Allocator() );
3.multimap ( const multimap<Key,T,Compare,Allocator>& x );
Capacity:
Modifiers:
insert
1.iterator insert ( const value_type& x );
2.iterator insert ( iterator position, const value_type& x );
3.template <class InputIterator>
void insert ( InputIterator first, InputIterator last );
1.void erase ( iterator position );
2.size_type erase ( const key_type& x );// returns the number of elements erased
3.void erase ( iterator first, iterator last );
Observers:
//omit them
Operations:
与map类似,但是允许不同的mapped_value拥有相同的key_value,实际应用,一个人拥有多个QQ、邮箱、电话号码等
与map的区别在于,insert()一定会插入值;erase(element_value)即version 1,会删除所有相同元素值的元素
multimap模板
template < class Key, class T, class Compare = less<Key>,
class Allocator = allocator<pair<const Key,T> > > class multimap;
Member functions
(constructor) | Construct multiset |
(destructor) | Multiset destructor |
operator= | Copy container content |
1.explicit multimap ( const Compare& comp = Compare(),
const Allocator& = Allocator() );
2.template <class InputIterator>
multimap ( InputIterator first, InputIterator last,
const Compare& comp = Compare(), const Allocator& = Allocator() );
3.multimap ( const multimap<Key,T,Compare,Allocator>& x );
eg:
multimap<char,int> first;
first.insert(pair<char,int>('a',10));
first.insert(pair<char,int>('b',15));
first.insert(pair<char,int>('b',20));
first.insert(pair<char,int>('c',25));
multimap<char,int> second (first.begin(),first.end());
Iterators:
begin | Return iterator to beginning |
end | Return iterator to end |
rbegin | Return reverse iterator to reverse beginning |
rend | Return reverse iterator to reverse end |
empty | Test whether container is empty |
size | Return container size |
max_size | Return maximum size |
insert | Insert element |
erase | Erase elements |
swap | Swap content |
clear | Clear content |
1.iterator insert ( const value_type& x );
2.iterator insert ( iterator position, const value_type& x );
3.template <class InputIterator>
void insert ( InputIterator first, InputIterator last );
eg:
mymultimap.insert(pair<char,int>('a',10));
mymultimap.insert(pair<char,int>('b',121));
mymultimap.insert(pair<char,int>('c',1001));
mymultimap.insert(pair<char,int>('c',2002));//same key_value
mymultimap.insert(pair<char,int>('d',11011));
mymultimap.insert(pair<char,int>('e',44));
erase
1.void erase ( iterator position );
2.size_type erase ( const key_type& x );// returns the number of elements erased
3.void erase ( iterator first, iterator last );
Observers:
key_comp | Return comparison object |
value_comp | Return comparison object |
Operations:
find | Get iterator to element |
count | Count elements with a specific key//return element appear times |
lower_bound | Return iterator to lower bound |
upper_bound | Return iterator to upper bound |
equal_range | Get range of equal elements |
eg:
//lower_bound & upper_bound
itlow=mymultimap.lower_bound ('b'); // >='b'
itup=mymultimap.upper_bound ('d'); // >'d'
for ( it=itlow ; it != itup; it++ )
cout << (*it).first << " => " << (*it).second << endl;
//equal_range
pair<multimap<char,int>::iterator,multimap<char,int>::iterator> ret;
for (char ch='a'; ch<='d'; ch++)
{
cout << ch << " =>";
ret = mymm.equal_range(ch);
for (it=ret.first; it!=ret.second; ++it)
cout << " " << (*it).second;
cout << endl;
}
Allocator:
get_allocator
//same as before like list etc. omit it