94 lines
2.3 KiB
C++
94 lines
2.3 KiB
C++
/** @file
|
|
|
|
$Id$
|
|
|
|
$Date$
|
|
$Author$
|
|
|
|
@copy © Marc Wäckerlin
|
|
@license LGPL, see file <a href="license.html">COPYING</a>
|
|
|
|
$Log$
|
|
Revision 1.2 2004/12/20 07:40:36 marc
|
|
documentation improved, new grouping
|
|
|
|
Revision 1.1 2004/10/07 09:31:30 marc
|
|
new feature
|
|
|
|
|
|
*/
|
|
#ifndef __MRW__MULTIMAP__HPP__
|
|
#define __MRW__MULTIMAP__HPP__
|
|
|
|
#include <map>
|
|
#include <mrw/exception.hpp>
|
|
#include <mrw/string.hpp>
|
|
|
|
/** @addtogroup StdExt
|
|
*/
|
|
//@{
|
|
/** @addtogroup StdExtSTL
|
|
*/
|
|
//@{
|
|
/** @addtogroup StdExtmultimap multimap
|
|
*/
|
|
//@{
|
|
|
|
/** @brief insert a value in a multimap
|
|
|
|
@code
|
|
std::multimap<int, std::string> test;
|
|
test<<std::make_pair(1, std::string("one"))
|
|
<<std::make_pair(2, std::string("two"));
|
|
@endcode
|
|
|
|
@throw mrw::invalid_argument, if element is already in multimap
|
|
@param l a multimap of values
|
|
@param o a value to be inserted into multimap @c l
|
|
@pre #include <mrw/multimap.hpp>
|
|
*/
|
|
template <typename K, typename T, class C, typename A>
|
|
std::multimap<K, T, C, A>& operator<<(std::multimap<K, T, C, A>& l, const std::pair<K, T>& o)
|
|
throw(std::bad_exception) {
|
|
l.insert(o);
|
|
return l;
|
|
}
|
|
|
|
/** @brief extract the first value of a multimap
|
|
|
|
@code
|
|
std::multimap<int, std::string> test;
|
|
test<<std::make_pair(1, std::string("one"))
|
|
<<std::make_pair(2, std::string("two"));
|
|
std::pair<int, std::string> i1, i2;
|
|
test>>i1>>i2;
|
|
// now: i1==(1, "one") i2==(2, "two") test=={}
|
|
@endcode
|
|
|
|
@param l a multimap of values
|
|
@param o a value to be extracted from multimap @c l
|
|
@throw mrw::length_error, if multimap was empty on entry
|
|
@note when something is extracted from a multimap, it is removed
|
|
from the multimap, that means after every shift the multimap is
|
|
shortened by the shifted element
|
|
@pre #include <mrw/multimap.hpp>
|
|
*/
|
|
template <typename K, typename T, class C, typename A>
|
|
std::multimap<K, T, C, A>& operator>>(std::multimap<K, T, C, A>& l, std::pair<K, T>& o)
|
|
throw(std::exception) {
|
|
typename std::multimap<K, T, C, A>::iterator it(l.begin());
|
|
if (it==l.end())
|
|
throw mrw::length_error(std::string(__FILE__ ":")+__LINE__+
|
|
": std::multimap<>& operator>>(std::multimap<>&, T&),"
|
|
" multimap is empty");
|
|
o = *it;
|
|
l.erase(it);
|
|
return l;
|
|
}
|
|
|
|
//@}
|
|
//@}
|
|
//@}
|
|
|
|
#endif
|