multimap
(STL/CLR)
The template class describes an object that controls a varying-length sequence of elements that has bidirectional access. You use the container multimap
to manage a sequence of elements as a (nearly) balanced ordered tree of nodes, each storing one element. An element consists of a key, for ordering the sequence, and a mapped value, which goes along for the ride.
In the description below, GValue
is the same as:
Microsoft::VisualC::StlClr::GenericPair<GKey, GMapped>
where:
GKey
is the same as Key
unless the latter is a ref type, in which case it's Key^
GMapped
is the same as Mapped
unless the latter is a ref type, in which case it's Mapped^
Syntax
template<typename Key,
typename Mapped>
ref class multimap
: public
System::ICloneable,
System::Collections::IEnumerable,
System::Collections::ICollection,
System::Collections::Generic::IEnumerable<GValue>,
System::Collections::Generic::ICollection<GValue>,
System::Collections::Generic::IList<GValue>,
Microsoft::VisualC::StlClr::ITree<Gkey, GValue>
{ ..... };
Parameters
Key
The type of the key component of an element in the controlled sequence.
Mapped
The type of the other component of an element in the controlled sequence.
Requirements
Header: <cliext/map>
Namespace: cliext
Declarations
Type definition | Description |
---|---|
multimap::const_iterator |
The type of a constant iterator for the controlled sequence. |
multimap::const_reference |
The type of a constant reference to an element. |
multimap::const_reverse_iterator |
The type of a constant reverse iterator for the controlled sequence. |
multimap::difference_type |
The type of a (possibly signed) distance between two elements. |
multimap::generic_container |
The type of the generic interface for the container. |
multimap::generic_iterator |
The type of an iterator for the generic interface for the container. |
multimap::generic_reverse_iterator |
The type of a reverse iterator for the generic interface for the container. |
multimap::generic_value |
The type of an element for the generic interface for the container. |
multimap::iterator |
The type of an iterator for the controlled sequence. |
multimap::key_compare |
The ordering delegate for two keys. |
multimap::key_type |
The type of an ordering key. |
multimap::mapped_type |
The type of the mapped value associated with each key. |
multimap::reference |
The type of a reference to an element. |
multimap::reverse_iterator |
The type of a reverse iterator for the controlled sequence. |
multimap::size_type |
The type of a (non-negative) distance between two elements. |
multimap::value_compare |
The ordering delegate for two element values. |
multimap::value_type |
The type of an element. |
Member function | Description |
---|---|
multimap::begin |
Designates the beginning of the controlled sequence. |
multimap::clear |
Removes all elements. |
multimap::count |
Counts elements matching a specified key. |
multimap::empty |
Tests whether no elements are present. |
multimap::end |
Designates the end of the controlled sequence. |
multimap::equal_range |
Finds range that matches a specified key. |
multimap::erase |
Removes elements at specified positions. |
multimap::find |
Finds an element that matches a specified key. |
multimap::insert |
Adds elements. |
multimap::key_comp |
Copies the ordering delegate for two keys. |
multimap::lower_bound |
Finds beginning of range that matches a specified key. |
multimap::make_value |
Constructs a value object. |
multimap::multimap |
Constructs a container object. |
multimap::rbegin |
Designates the beginning of the reversed controlled sequence. |
multimap::rend |
Designates the end of the reversed controlled sequence. |
multimap::size |
Counts the number of elements. |
multimap::swap |
Swaps the contents of two containers. |
multimap::to_array |
Copies the controlled sequence to a new array. |
multimap::upper_bound |
Finds end of range that matches a specified key. |
multimap::value_comp |
Copies the ordering delegate for two element values. |
Operator | Description |
---|---|
multimap::operator= |
Replaces the controlled sequence. |
operator!= (multimap) |
Determines if a multimap object isn't equal to another multimap object. |
operator< (multimap) |
Determines if a multimap object is less than another multimap object. |
operator<= (multimap) |
Determines if a multimap object is less than or equal to another multimap object. |
operator== (multimap) |
Determines if a multimap object is equal to another multimap object. |
operator> (multimap) |
Determines if a multimap object is greater than another multimap object. |
operator>= (multimap) |
Determines if a multimap object is greater than or equal to another multimap object. |
Interfaces
Interface | Description |
---|---|
ICloneable | Duplicate an object. |
IEnumerable | Sequence through elements. |
ICollection | Maintain group of elements. |
IEnumerable<T> | Sequence through typed elements. |
ICollection<T> | Maintain group of typed elements. |
ITree<Key, Value> |
Maintain generic container. |
Remarks
The object allocates and frees storage for the sequence it controls as individual nodes. It inserts elements into a (nearly) balanced tree that it keeps ordered by altering the links between nodes, never by copying the contents of one node to another. That means you can insert and remove elements freely without disturbing remaining elements.
The object orders the sequence it controls by calling a stored delegate object of type multimap::key_compare
. You can specify the stored delegate object when you construct the multimap; if you specify no delegate object, the default is the comparison operator<(key_type, key_type)
. You access this stored object by calling the member function multimap::key_comp
.
Such a delegate object must impose a strict weak ordering on keys of type multimap::key_type
. That means, for any two keys X
and Y
:
key_comp()(X, Y)
returns the same Boolean result on every call.
If key_comp()(X, Y)
is true, then key_comp()(Y, X)
must be false.
If key_comp()(X, Y)
is true, then X
is said to be ordered before Y
.
If !key_comp()(X, Y) && !key_comp()(Y, X)
is true, then X
and Y
are said to have equivalent ordering.
For any element X
that precedes Y
in the controlled sequence, key_comp()(Y, X)
is false. (For the default delegate object, keys never decrease in value.) Unlike template class map (STL/CLR), an object of template class multimap
doesn't require that keys for all elements are unique. (Two or more keys can have equivalent ordering.)
Each element contains a separate key and a mapped value. The sequence is represented in a way that permits lookup, insertion, and removal of an arbitrary element in logarithmic time. That is, the number of operations is proportional to the logarithm of the number of elements in the sequence. Moreover, inserting an element invalidates no iterators, and removing an element invalidates only those iterators that point at the removed element.
A multimap
supports bidirectional iterators, which means you can step to adjacent elements given an iterator that designates an element in the controlled sequence. A special head node corresponds to the iterator returned by end()
. You can decrement this iterator to reach the last element in the controlled sequence, if present. You can increment a multimap
iterator to reach the head node, and it will then compare equal to end()
. But you can't dereference the iterator returned by end()
.
You can't refer to a multimap
element directly given its numerical position. That requires a random-access iterator.
A multimap
iterator stores a handle to its associated multimap
node, which in turn stores a handle to its associated container. You can use iterators only with their associated container objects. A multimap
iterator remains valid so long as its associated multimap
node is associated with some multimap. Moreover, a valid iterator is dereferencable. You can use it to access or alter the element value it designates, so long as it isn't equal to end()
.
Erasing or removing an element calls the destructor for its stored value. Destroying the container erases all elements. Thus, a container whose element type is a ref class ensures that no elements outlive the container. However, a container of handles doesn't destroy its elements.
Members
multimap::begin
Designates the beginning of the controlled sequence.
Syntax
iterator begin();
Remarks
The member function returns a bidirectional iterator that designates the first element of the controlled sequence, or just beyond the end of an empty sequence. You use it to obtain an iterator that designates the current
beginning of the controlled sequence, but its status can change if the length of the controlled sequence changes.
Example
// cliext_multimap_begin.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// inspect first two items
Mymultimap::iterator it = c1.begin();
System::Console::WriteLine("*begin() = [{0} {1}]",
it->first, it->second);
++it;
System::Console::WriteLine("*++begin() = [{0} {1}]",
it->first, it->second);
return (0);
}
[a 1] [b 2] [c 3]
*begin() = [a 1]
*++begin() = [b 2]
multimap::clear
Removes all elements.
Syntax
void clear();
Remarks
The member function effectively calls erase(begin(), end())
. You use it to ensure that the controlled sequence is empty.
Example
// cliext_multimap_clear.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// clear the container and reinspect
c1.clear();
System::Console::WriteLine("size() = {0}", c1.size());
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
// display contents " [a 1] [b 2]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
c1.clear();
System::Console::WriteLine("size() = {0}", c1.size());
return (0);
}
[a 1] [b 2] [c 3]
size() = 0
[a 1] [b 2]
size() = 0
multimap::const_iterator
The type of a constant iterator for the controlled sequence.
Syntax
typedef T2 const_iterator;
Remarks
The type describes an object of unspecified type T2
that can serve as a constant bidirectional iterator for the controlled sequence.
Example
// cliext_multimap_const_iterator.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
Mymultimap::const_iterator cit = c1.begin();
for (; cit != c1.end(); ++cit)
System::Console::Write("[{0} {1}] ", cit->first, cit->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
multimap::const_reference
The type of a constant reference to an element.
Syntax
typedef value_type% const_reference;
Remarks
The type describes a constant reference to an element.
Example
// cliext_multimap_const_reference.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
Mymultimap::const_iterator cit = c1.begin();
for (; cit != c1.end(); ++cit)
{ // get a const reference to an element
Mymultimap::const_reference cref = *cit;
System::Console::Write("[{0} {1}] ", cref->first, cref->second);
}
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
multimap::const_reverse_iterator
The type of a constant reverse iterator for the controlled sequence.
Syntax
typedef T4 const_reverse_iterator;
Remarks
The type describes an object of unspecified type T4
that can serve as a constant reverse iterator for the controlled sequence.
Example
// cliext_multimap_const_reverse_iterator.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]" reversed
Mymultimap::const_reverse_iterator crit = c1.rbegin();
for (; crit != c1.rend(); ++crit)
System::Console::Write("[{0} {1}] ", crit->first, crit->second);
System::Console::WriteLine();
return (0);
}
[c 3] [b 2] [a 1]
multimap::count
Finds the number of elements matching a specified key.
Syntax
size_type count(key_type key);
Parameters
key
Key value to search for.
Remarks
The member function returns the number of elements in the controlled sequence that have equivalent ordering with key
. You use it to determine the number of elements currently in the controlled sequence that match a specified key.
Example
// cliext_multimap_count.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("count(L'A') = {0}", c1.count(L'A'));
System::Console::WriteLine("count(L'b') = {0}", c1.count(L'b'));
System::Console::WriteLine("count(L'C') = {0}", c1.count(L'C'));
return (0);
}
[a 1] [b 2] [c 3]
count(L'A') = 0
count(L'b') = 1
count(L'C') = 0
multimap::difference_type
The types of a signed distance between two elements.
Syntax
typedef int difference_type;
Remarks
The type describes a possibly negative element count.
Example
// cliext_multimap_difference_type.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// compute positive difference
Mymultimap::difference_type diff = 0;
for (Mymultimap::iterator it = c1.begin(); it != c1.end(); ++it)
++diff;
System::Console::WriteLine("end()-begin() = {0}", diff);
// compute negative difference
diff = 0;
for (Mymultimap::iterator it = c1.end(); it != c1.begin(); --it)
--diff;
System::Console::WriteLine("begin()-end() = {0}", diff);
return (0);
}
[a 1] [b 2] [c 3]
end()-begin() = 3
begin()-end() = -3
multimap::empty
Tests whether no elements are present.
Syntax
bool empty();
Remarks
The member function returns true for an empty controlled sequence. It's equivalent to size() == 0
. You use it to test whether the multimap
is empty.
Example
// cliext_multimap_empty.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("size() = {0}", c1.size());
System::Console::WriteLine("empty() = {0}", c1.empty());
// clear the container and reinspect
c1.clear();
System::Console::WriteLine("size() = {0}", c1.size());
System::Console::WriteLine("empty() = {0}", c1.empty());
return (0);
}
[a 1] [b 2] [c 3]
size() = 3
empty() = False
size() = 0
empty() = True
multimap::end
Designates the end of the controlled sequence.
Syntax
iterator end();
Remarks
The member function returns a bidirectional iterator that points just beyond the end of the controlled sequence. You use it to obtain an iterator that designates the end of the controlled sequence; its status doesn't change if the length of the controlled sequence changes.
Example
// cliext_multimap_end.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// inspect last two items
Mymultimap::iterator it = c1.end();
--it;
--it;
System::Console::WriteLine("*-- --end() = [{0} {1}]",
it->first, it->second);
++it;
System::Console::WriteLine("*--end() = [{0} {1}]",
it->first, it->second);
return (0);
}
[a 1] [b 2] [c 3]
*-- --end() = [b 2]
*--end() = [c 3]
multimap::equal_range
Finds range that matches a specified key.
Syntax
pair_iter_iter equal_range(key_type key);
Parameters
key
Key value to search for.
Remarks
The method returns a pair of iterators, pair_iter_iter(lower_bound(key), upper_bound(key))
. You use it to determine the range of elements currently in the controlled sequence that match a specified key.
Example
// cliext_multimap_equal_range.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
typedef Mymultimap::pair_iter_iter Pairii;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// display results of failed search
Pairii pair1 = c1.equal_range(L'x');
System::Console::WriteLine("equal_range(L'x') empty = {0}",
pair1.first == pair1.second);
// display results of successful search
pair1 = c1.equal_range(L'b');
for (; pair1.first != pair1.second; ++pair1.first)
System::Console::Write("[{0} {1}] ",
pair1.first->first, pair1.first->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
equal_range(L'x') empty = True
[b 2]
multimap::erase
Removes elements at specified positions.
Syntax
iterator erase(iterator where);
iterator erase(iterator first, iterator last);
bool erase(key_type key)
Parameters
first
Beginning of range to erase.
key
Key value to erase.
last
End of range to erase.
where
Element to erase.
Remarks
The first member function removes the element of the controlled sequence pointed to by where
, and returns an iterator that designates the first element remaining beyond the element removed, or end()
if no such element exists. You use it to remove a single element.
The second member function removes the elements of the controlled sequence in the range [first
, last
), and returns an iterator that designates the first element remaining beyond any elements removed, or end()
if no such element exists. You use it to remove zero or more contiguous elements.
The third member function removes any element of the controlled sequence whose key has equivalent ordering to key
, and returns a count of the number of elements removed. You use it to remove and count all elements that match a specified key.
Each element erasure takes time proportional to the logarithm of the number of elements in the controlled sequence.
Example
// cliext_multimap_erase.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
cliext::multimap<wchar_t, int> c1;
c1.insert(cliext::multimap<wchar_t, int>::make_value(L'a', 1));
c1.insert(cliext::multimap<wchar_t, int>::make_value(L'b', 2));
c1.insert(cliext::multimap<wchar_t, int>::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (cliext::multimap<wchar_t, int>::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// erase an element and reinspect
cliext::multimap<wchar_t, int>::iterator it =
c1.erase(c1.begin());
System::Console::WriteLine("erase(begin()) = [{0} {1}]",
it->first, it->second);
// add elements and display " b c d e"
c1.insert(cliext::multimap<wchar_t, int>::make_value(L'd', 4));
c1.insert(cliext::multimap<wchar_t, int>::make_value(L'e', 5));
for each (cliext::multimap<wchar_t, int>::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// erase all but end
it = c1.end();
it = c1.erase(c1.begin(), --it);
System::Console::WriteLine("erase(begin(), end()-1) = [{0} {1}]",
it->first, it->second);
System::Console::WriteLine("size() = {0}", c1.size());
// erase end
System::Console::WriteLine("erase(L'x') = {0}", c1.erase(L'x'));
System::Console::WriteLine("erase(L'e') = {0}", c1.erase(L'e'));
return (0);
}
[a 1] [b 2] [c 3]
erase(begin()) = [b 2]
[b 2] [c 3] [d 4] [e 5]
erase(begin(), end()-1) = [e 5]
size() = 1
erase(L'x') = 0
erase(L'e') = 1
multimap::find
Finds an element that matches a specified key.
Syntax
iterator find(key_type key);
Parameters
key
Key value to search for.
Remarks
If at least one element in the controlled sequence has equivalent ordering with key
, the member function returns an iterator designating one of those elements; otherwise it returnsend()
. You use it to locate an element currently in the controlled sequence that matches a specified key.
Example
// cliext_multimap_find.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("find {0} = {1}",
L'A', c1.find(L'A') != c1.end());
Mymultimap::iterator it = c1.find(L'b');
System::Console::WriteLine("find {0} = [{1} {2}]",
L'b', it->first, it->second);
System::Console::WriteLine("find {0} = {1}",
L'C', c1.find(L'C') != c1.end());
return (0);
}
[a 1] [b 2] [c 3]
find A = False
find b = [b 2]
find C = False
multimap::generic_container
The type of the generic interface for the container.
Syntax
typedef Microsoft::VisualC::StlClr::
ITree<GKey, GValue>
generic_container;
Remarks
The type describes the generic interface for this template container class.
Example
// cliext_multimap_generic_container.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct a generic container
Mymultimap::generic_container^ gc1 = %c1;
for each (Mymultimap::value_type elem in gc1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// modify generic and display original
gc1->insert(Mymultimap::make_value(L'd', 4));
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// modify original and display generic
c1.insert(Mymultimap::make_value(L'e', 5));
for each (Mymultimap::value_type elem in gc1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3] [d 4]
[a 1] [b 2] [c 3] [d 4] [e 5]
multimap::generic_iterator
The type of an iterator for use with the generic interface for the container.
Syntax
typedef Microsoft::VisualC::StlClr::Generic::
ContainerBidirectionalIterator<generic_value>
generic_iterator;
Remarks
The type describes a generic iterator that can be used with the generic interface for this template container class.
Example
// cliext_multimap_generic_iterator.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct a generic container
Mymultimap::generic_container^ gc1 = %c1;
for each (Mymultimap::value_type elem in gc1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// get an element and display it
Mymultimap::generic_iterator gcit = gc1->begin();
Mymultimap::generic_value gcval = *gcit;
System::Console::Write("[{0} {1}] ", gcval->first, gcval->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3]
[a 1]
multimap::generic_reverse_iterator
The type of a reverse iterator for use with the generic interface for the container.
Syntax
typedef Microsoft::VisualC::StlClr::Generic::
ReverseRandomAccessIterator<generic_value>
generic_reverse_iterator;
Remarks
The type describes a generic reverse iterator that can be used with the generic interface for this template container class.
Example
// cliext_multimap_generic_reverse_iterator.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct a generic container
Mymultimap::generic_container^ gc1 = %c1;
for each (Mymultimap::value_type elem in gc1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// get an element and display it
Mymultimap::generic_reverse_iterator gcit = gc1->rbegin();
Mymultimap::generic_value gcval = *gcit;
System::Console::WriteLine("[{0} {1}] ", gcval->first, gcval->second);
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3]
[c 3]
multimap::generic_value
The type of an element for use with the generic interface for the container.
Syntax
typedef GValue generic_value;
Remarks
The type describes an object of type GValue
that describes the stored element value for use with the generic interface for this template container class.
Example
// cliext_multimap_generic_value.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct a generic container
Mymultimap::generic_container^ gc1 = %c1;
for each (Mymultimap::value_type elem in gc1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// get an element and display it
Mymultimap::generic_iterator gcit = gc1->begin();
Mymultimap::generic_value gcval = *gcit;
System::Console::WriteLine("[{0} {1}] ", gcval->first, gcval->second);
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3]
[a 1]
multimap::insert
Adds elements.
Syntax
iterator insert(value_type val);
iterator insert(iterator where, value_type val);
template<typename InIter>
void insert(InIter first, InIter last);
void insert(System::Collections::Generic::IEnumerable<value_type>^ right);
Parameters
first
Beginning of range to insert.
last
End of range to insert.
right
Enumeration to insert.
val
Key value to insert.
where
Where in container to insert (hint only).
Remarks
Each of the member functions inserts a sequence specified by the remaining operands.
The first member function inserts an element with value val
, and returns an iterator that designates the newly inserted element. You use it to insert a single element.
The second member function inserts an element with value val
, using where
as a hint (to improve performance), and returns an iterator that designates the newly inserted element. You use it to insert a single element that might be next to an element you know.
The third member function inserts the sequence [first
, last
). You use it to insert zero or more elements copied from another sequence.
The fourth member function inserts the sequence designated by the right
. You use it to insert a sequence described by an enumerator.
Each element insertion takes time proportional to the logarithm of the number of elements in the controlled sequence. Insertion can occur in amortized constant time, however, given a hint that designates an element next to the insertion point.
Example
// cliext_multimap_insert.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// insert a single value, unique and duplicate
Mymultimap::iterator it =
c1.insert(Mymultimap::make_value(L'x', 24));
System::Console::WriteLine("insert([L'x' 24]) = [{0} {1}]",
it->first, it->second);
it = c1.insert(Mymultimap::make_value(L'b', 2));
System::Console::WriteLine("insert([L'b' 2]) = [{0} {1}]",
it->first, it->second);
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// insert a single value with hint
it = c1.insert(c1.begin(), Mymultimap::make_value(L'y', 25));
System::Console::WriteLine("insert(begin(), [L'y' 25]) = [{0} {1}]",
it->first, it->second);
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// insert an iterator range
Mymultimap c2;
it = c1.end();
c2.insert(c1.begin(), --it);
for each (Mymultimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// insert an enumeration
Mymultimap c3;
c3.insert( // NOTE: cast is not needed
(System::Collections::Generic::
IEnumerable<Mymultimap::value_type>^)%c1);
for each (Mymultimap::value_type elem in c3)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
insert([L'x' 24]) = [x 24]
insert([L'b' 2]) = [b 2]
[a 1] [b 2] [b 2] [c 3] [x 24]
insert(begin(), [L'y' 25]) = [y 25]
[a 1] [b 2] [b 2] [c 3] [x 24] [y 25]
[a 1] [b 2] [b 2] [c 3] [x 24]
[a 1] [b 2] [b 2] [c 3] [x 24] [y 25]
multimap::iterator
The type of an iterator for the controlled sequence.
Syntax
typedef T1 iterator;
Remarks
The type describes an object of unspecified type T1
that can serve as a bidirectional iterator for the controlled sequence.
Example
// cliext_multimap_iterator.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
Mymultimap::iterator it = c1.begin();
for (; it != c1.end(); ++it)
System::Console::Write("[{0} {1}] ", it->first, it->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
multimap::key_comp
Copies the ordering delegate for two keys.
Syntax
key_compare^key_comp();
Remarks
The member function returns the ordering delegate used to order the controlled sequence. You use it to compare two keys.
Example
// cliext_multimap_key_comp.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
Mymultimap::key_compare^ kcomp = c1.key_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
System::Console::WriteLine();
// test a different ordering rule
Mymultimap c2 = cliext::greater<wchar_t>();
kcomp = c2.key_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
return (0);
}
compare(L'a', L'a') = False
compare(L'a', L'b') = True
compare(L'b', L'a') = False
compare(L'a', L'a') = False
compare(L'a', L'b') = False
compare(L'b', L'a') = True
multimap::key_compare
The ordering delegate for two keys.
Syntax
Microsoft::VisualC::StlClr::BinaryDelegate<GKey, GKey, bool>
key_compare;
Remarks
The type is a synonym for the delegate that determines the ordering of its key arguments.
Example
// cliext_multimap_key_compare.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
Mymultimap::key_compare^ kcomp = c1.key_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
System::Console::WriteLine();
// test a different ordering rule
Mymultimap c2 = cliext::greater<wchar_t>();
kcomp = c2.key_comp();
System::Console::WriteLine("compare(L'a', L'a') = {0}",
kcomp(L'a', L'a'));
System::Console::WriteLine("compare(L'a', L'b') = {0}",
kcomp(L'a', L'b'));
System::Console::WriteLine("compare(L'b', L'a') = {0}",
kcomp(L'b', L'a'));
return (0);
}
compare(L'a', L'a') = False
compare(L'a', L'b') = True
compare(L'b', L'a') = False
compare(L'a', L'a') = False
compare(L'a', L'b') = False
compare(L'b', L'a') = True
multimap::key_type
The type of an ordering key.
Syntax
typedef Key key_type;
Remarks
The type is a synonym for the template parameter Key
.
Example
// cliext_multimap_key_type.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]" using key_type
for (Mymultimap::iterator it = c1.begin(); it != c1.end(); ++it)
{ // store element in key_type object
Mymultimap::key_type val = it->first;
System::Console::Write("{0} ", val);
}
System::Console::WriteLine();
return (0);
}
a b c
multimap::lower_bound
Finds beginning of range that matches a specified key.
Syntax
iterator lower_bound(key_type key);
Parameters
key
Key value to search for.
Remarks
The member function determines the first element X
in the controlled sequence that has equivalent ordering to key
. If no such element exists, it returns end()
; otherwise it returns an iterator that designates X
. You use it to locate the beginning of a sequence of elements currently in the controlled sequence that match a specified key.
Example
// cliext_multimap_lower_bound.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("lower_bound(L'x')==end() = {0}",
c1.lower_bound(L'x') == c1.end());
Mymultimap::iterator it = c1.lower_bound(L'a');
System::Console::WriteLine("*lower_bound(L'a') = [{0} {1}]",
it->first, it->second);
it = c1.lower_bound(L'b');
System::Console::WriteLine("*lower_bound(L'b') = [{0} {1}]",
it->first, it->second);
return (0);
}
[a 1] [b 2] [c 3]
lower_bound(L'x')==end() = True
*lower_bound(L'a') = [a 1]
*lower_bound(L'b') = [b 2]
multimap::make_value
Constructs a value object.
Syntax
static value_type make_value(key_type key, mapped_type mapped);
Parameters
key
Key value to use.
mapped
Mapped value to search for.
Remarks
The member function returns a value_type
object whose key is key
and whose mapped value is mapped
. You use it to compose an object suitable for use with several other member functions.
Example
// cliext_multimap_make_value.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
multimap::mapped_type
The type of a mapped value associated with each key.
Syntax
typedef Mapped mapped_type;
Remarks
The type is a synonym for the template parameter Mapped
.
Example
// cliext_multimap_mapped_type.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]" using mapped_type
for (Mymultimap::iterator it = c1.begin(); it != c1.end(); ++it)
{ // store element in mapped_type object
Mymultimap::mapped_type val = it->second;
System::Console::Write("{0} ", val);
}
System::Console::WriteLine();
return (0);
}
1 2 3
multimap::multimap
Constructs a container object.
Syntax
multimap();
explicit multimap(key_compare^ pred);
multimap(multimap<Key, Mapped>% right);
multimap(multimap<Key, Mapped>^ right);
template<typename InIter>
multimapmultimap(InIter first, InIter last);
template<typename InIter>
multimap(InIter first, InIter last,
key_compare^ pred);
multimap(System::Collections::Generic::IEnumerable<GValue>^ right);
multimap(System::Collections::Generic::IEnumerable<GValue>^ right,
key_compare^ pred);
Parameters
first
Beginning of range to insert.
last
End of range to insert.
pred
Ordering predicate for the controlled sequence.
right
Object or range to insert.
Remarks
The constructor:
multimap();
initializes the controlled sequence with no elements, with the default ordering predicate key_compare()
. You use it to specify an empty initial controlled sequence, with the default ordering predicate.
The constructor:
explicit multimap(key_compare^ pred);
initializes the controlled sequence with no elements, with the ordering predicate pred
. You use it to specify an empty initial controlled sequence, with the specified ordering predicate.
The constructor:
multimap(multimap<Key, Mapped>% right);
initializes the controlled sequence with the sequence [right.begin()
, right.end()
), with the default ordering predicate. You use it to specify an initial controlled sequence that is a copy of the sequence controlled by the multimap
object right
, with the default ordering predicate.
The constructor:
multimap(multimap<Key, Mapped>^ right);
initializes the controlled sequence with the sequence [right->begin()
, right->end()
), with the default ordering predicate. You use it to specify an initial controlled sequence that is a copy of the sequence controlled by the multimap
object right
, with the default ordering predicate.
The constructor:
template<typename InIter> multimap(InIter first, InIter last);
initializes the controlled sequence with the sequence [first
, last
), with the default ordering predicate. You use it to make the controlled sequence a copy of another sequence, with the default ordering predicate.
The constructor:
template<typename InIter> multimap(InIter first, InIter last, key_compare^ pred);
initializes the controlled sequence with the sequence [first
, last
), with the ordering predicate pred
. You use it to make the controlled sequence a copy of another sequence, with the specified ordering predicate.
The constructor:
multimap(System::Collections::Generic::IEnumerable<Key>^ right);
initializes the controlled sequence with the sequence designated by the enumerator right
, with the default ordering predicate. You use it to make the controlled sequence a copy of another sequence described by an enumerator, with the default ordering predicate.
The constructor:
multimap(System::Collections::Generic::IEnumerable<Key>^ right, key_compare^ pred);
initializes the controlled sequence with the sequence designated by the enumerator right
, with the ordering predicate pred
. You use it to make the controlled sequence a copy of another sequence described by an enumerator, with the specified ordering predicate.
Example
// cliext_multimap_construct.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
// construct an empty container
Mymultimap c1;
System::Console::WriteLine("size() = {0}", c1.size());
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct with an ordering rule
Mymultimap c2 = cliext::greater_equal<wchar_t>();
System::Console::WriteLine("size() = {0}", c2.size());
c2.insert(c1.begin(), c1.end());
for each (Mymultimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct with an iterator range
Mymultimap c3(c1.begin(), c1.end());
for each (Mymultimap::value_type elem in c3)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct with an iterator range and an ordering rule
Mymultimap c4(c1.begin(), c1.end(),
cliext::greater_equal<wchar_t>());
for each (Mymultimap::value_type elem in c4)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct with an enumeration
Mymultimap c5( // NOTE: cast is not needed
(System::Collections::Generic::IEnumerable<
Mymultimap::value_type>^)%c3);
for each (Mymultimap::value_type elem in c5)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct with an enumeration and an ordering rule
Mymultimap c6( // NOTE: cast is not needed
(System::Collections::Generic::IEnumerable<
Mymultimap::value_type>^)%c3,
cliext::greater_equal<wchar_t>());
for each (Mymultimap::value_type elem in c6)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct by copying another container
Mymultimap c7(c4);
for each (Mymultimap::value_type elem in c7)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct by copying a container handle
Mymultimap c8(%c3);
for each (Mymultimap::value_type elem in c8)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
size() = 0
[a 1] [b 2] [c 3]
size() = 0
[c 3] [b 2] [a 1]
[a 1] [b 2] [c 3]
[c 3] [b 2] [a 1]
[a 1] [b 2] [c 3]
[c 3] [b 2] [a 1]
[c 3] [b 2] [a 1]
[a 1] [b 2] [c 3]
multimap::operator=
Replaces the controlled sequence.
Syntax
multimap<Key, Mapped>% operator=(multimap<Key, Mapped>% right);
Parameters
right
Container to copy.
Remarks
The member operator copies right
to the object, then returns *this
. You use it to replace the controlled sequence with a copy of the controlled sequence in right
.
Example
// cliext_multimap_operator_as.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// assign to a new container
Mymultimap c2;
c2 = c1;
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [c 3]
multimap::rbegin
Designates the beginning of the reversed controlled sequence.
Syntax
reverse_iterator rbegin();
Remarks
The member function returns a reverse iterator that designates the last element of the controlled sequence, or just beyond the beginning of an empty sequence. Hence, it designates the beginning
of the reverse sequence. You use it to obtain an iterator that designates the current
beginning of the controlled sequence seen in reverse order, but its status can change if the length of the controlled sequence changes.
Example
// cliext_multimap_rbegin.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// inspect first two items in reversed sequence
Mymultimap::reverse_iterator rit = c1.rbegin();
System::Console::WriteLine("*rbegin() = [{0} {1}]",
rit->first, rit->second);
++rit;
System::Console::WriteLine("*++rbegin() = [{0} {1}]",
rit->first, rit->second);
return (0);
}
[a 1] [b 2] [c 3]
*rbegin() = [c 3]
*++rbegin() = [b 2]
multimap::reference
The type of a reference to an element.
Syntax
typedef value_type% reference;
Remarks
The type describes a reference to an element.
Example
// cliext_multimap_reference.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
Mymultimap::iterator it = c1.begin();
for (; it != c1.end(); ++it)
{ // get a reference to an element
Mymultimap::reference ref = *it;
System::Console::Write("[{0} {1}] ", ref->first, ref->second);
}
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
multimap::rend
Designates the end of the reversed controlled sequence.
Syntax
reverse_iterator rend();
Remarks
The member function returns a reverse iterator that points just beyond the beginning of the controlled sequence. Hence, it designates the end
of the reverse sequence. You use it to obtain an iterator that designates the current
end of the controlled sequence seen in reverse order, but its status can change if the length of the controlled sequence changes.
Example
// cliext_multimap_rend.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// inspect first two items in reversed sequence
Mymultimap::reverse_iterator rit = c1.rend();
--rit;
--rit;
System::Console::WriteLine("*-- --rend() = [{0} {1}]",
rit->first, rit->second);
++rit;
System::Console::WriteLine("*--rend() = [{0} {1}]",
rit->first, rit->second);
return (0);
}
[a 1] [b 2] [c 3]
*-- --rend() = [b 2]
*--rend() = [a 1]
multimap::reverse_iterator
The type of a reverse iterator for the controlled sequence.
Syntax
typedef T3 reverse_iterator;
Remarks
The type describes an object of unspecified type T3
that can serve as a reverse iterator for the controlled sequence.
Example
// cliext_multimap_reverse_iterator.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]" reversed
Mymultimap::reverse_iterator rit = c1.rbegin();
for (; rit != c1.rend(); ++rit)
System::Console::Write("[{0} {1}] ", rit->first, rit->second);
System::Console::WriteLine();
return (0);
}
[c 3] [b 2] [a 1]
multimap::size
Counts the number of elements.
Syntax
size_type size();
Remarks
The member function returns the length of the controlled sequence. You use it to determine the number of elements currently in the controlled sequence. If all you care about is whether the sequence has nonzero size, see empty()
.
Example
// cliext_multimap_size.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// clear the container and reinspect
c1.clear();
System::Console::WriteLine("size() = {0} after clearing", c1.size());
// add elements and clear again
c1.insert(Mymultimap::make_value(L'd', 4));
c1.insert(Mymultimap::make_value(L'e', 5));
System::Console::WriteLine("size() = {0} after adding 2", c1.size());
return (0);
}
[a 1] [b 2] [c 3]
size() = 0 after clearing
size() = 2 after adding 2
multimap::size_type
The type of a signed distance between two elements.
Syntax
typedef int size_type;
Remarks
The type describes a non-negative element count.
Example
// cliext_multimap_size_type.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// compute positive difference
Mymultimap::size_type diff = 0;
for (Mymultimap::iterator it = c1.begin(); it != c1.end(); ++it)
++diff;
System::Console::WriteLine("end()-begin() = {0}", diff);
return (0);
}
[a 1] [b 2] [c 3]
end()-begin() = 3
multimap::swap
Swaps the contents of two containers.
Syntax
void swap(multimap<Key, Mapped>% right);
Parameters
right
Container to swap contents with.
Remarks
The member function swaps the controlled sequences between this
and right
. It does so in constant time and it throws no exceptions. You use it as a quick way to exchange the contents of two containers.
Example
// cliext_multimap_swap.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// construct another container with repetition of values
Mymultimap c2;
c2.insert(Mymultimap::make_value(L'd', 4));
c2.insert(Mymultimap::make_value(L'e', 5));
c2.insert(Mymultimap::make_value(L'f', 6));
for each (Mymultimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// swap and redisplay
c1.swap(c2);
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
for each (Mymultimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
[d 4] [e 5] [f 6]
[d 4] [e 5] [f 6]
[a 1] [b 2] [c 3]
multimap::to_array
Copies the controlled sequence to a new array.
Syntax
cli::array<value_type>^ to_array();
Remarks
The member function returns an array containing the controlled sequence. You use it to obtain a copy of the controlled sequence in array form.
Example
// cliext_multimap_to_array.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// copy the container and modify it
cli::array<Mymultimap::value_type>^ a1 = c1.to_array();
c1.insert(Mymultimap::make_value(L'd', 4));
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// display the earlier array copy
for each (Mymultimap::value_type elem in a1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3] [d 4]
[a 1] [b 2] [c 3]
multimap::upper_bound
Finds end of range that matches a specified key.
Syntax
iterator upper_bound(key_type key);
Parameters
key
Key value to search for.
Remarks
The member function determines the last element X
in the controlled sequence that has equivalent ordering to key
. If no such element exists, or if X
is the last element in the controlled sequence, it returns end()
; otherwise it returns an iterator that designates the first element beyond X
. You use it to locate the end of a sequence of elements currently in the controlled sequence that match a specified key.
Example
// cliext_multimap_upper_bound.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("upper_bound(L'x')==end() = {0}",
c1.upper_bound(L'x') == c1.end());
Mymultimap::iterator it = c1.upper_bound(L'a');
System::Console::WriteLine("*upper_bound(L'a') = [{0} {1}]",
it->first, it->second);
it = c1.upper_bound(L'b');
System::Console::WriteLine("*upper_bound(L'b') = [{0} {1}]",
it->first, it->second);
return (0);
}
[a 1] [b 2] [c 3]
upper_bound(L'x')==end() = True
*upper_bound(L'a') = [b 2]
*upper_bound(L'b') = [c 3]
multimap::value_comp
Copies the ordering delegate for two element values.
Syntax
value_compare^ value_comp();
Remarks
The member function returns the ordering delegate used to order the controlled sequence. You use it to compare two element values.
Example
// cliext_multimap_value_comp.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::map<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
Mymultimap::value_compare^ kcomp = c1.value_comp();
System::Console::WriteLine("compare([L'a', 1], [L'a', 1]) = {0}",
kcomp(Mymultimap::make_value(L'a', 1),
Mymultimap::make_value(L'a', 1)));
System::Console::WriteLine("compare([L'a', 1], [L'b', 2]) = {0}",
kcomp(Mymultimap::make_value(L'a', 1),
Mymultimap::make_value(L'b', 2)));
System::Console::WriteLine("compare([L'b', 2], [L'a', 1]) = {0}",
kcomp(Mymultimap::make_value(L'b', 2),
Mymultimap::make_value(L'a', 1)));
System::Console::WriteLine();
return (0);
}
compare([L'a', 1], [L'a', 1]) = False
compare([L'a', 1], [L'b', 2]) = True
compare([L'b', 2], [L'a', 1]) = False
multimap::value_compare
The ordering delegate for two element values.
Syntax
Microsoft::VisualC::StlClr::BinaryDelegate<generic_value, generic_value, bool>
value_compare;
Remarks
The type is a synonym for the delegate that determines the ordering of its value arguments.
Example
// cliext_multimap_value_compare.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::map<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
Mymultimap::value_compare^ kcomp = c1.value_comp();
System::Console::WriteLine("compare([L'a', 1], [L'a', 1]) = {0}",
kcomp(Mymultimap::make_value(L'a', 1),
Mymultimap::make_value(L'a', 1)));
System::Console::WriteLine("compare([L'a', 1], [L'b', 2]) = {0}",
kcomp(Mymultimap::make_value(L'a', 1),
Mymultimap::make_value(L'b', 2)));
System::Console::WriteLine("compare([L'b', 2], [L'a', 1]) = {0}",
kcomp(Mymultimap::make_value(L'b', 2),
Mymultimap::make_value(L'a', 1)));
System::Console::WriteLine();
return (0);
}
compare([L'a', 1], [L'a', 1]) = False
compare([L'a', 1], [L'b', 2]) = True
compare([L'b', 2], [L'a', 1]) = False
multimap::value_type
The type of an element.
Syntax
typedef generic_value value_type;
Remarks
The type is a synonym for generic_value
.
Example
// cliext_multimap_value_type.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]" using value_type
for (Mymultimap::iterator it = c1.begin(); it != c1.end(); ++it)
{ // store element in value_type object
Mymultimap::value_type val = *it;
System::Console::Write("[{0} {1}] ", val->first, val->second);
}
System::Console::WriteLine();
return (0);
}
[a 1] [b 2] [c 3]
operator!=
(multimap)
List not equal comparison.
Syntax
template<typename Key,
typename Mapped>
bool operator!=(multimap<Key, Mapped>% left,
multimap<Key, Mapped>% right);
Parameters
left
Left container to compare.
right
Right container to compare.
Remarks
The operator function returns !(left == right)
. You use it to test whether left
isn't ordered the same as right
when the two multimaps are compared element by element.
Example
// cliext_multimap_operator_ne.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// assign to a new container
Mymultimap c2;
c2.insert(Mymultimap::make_value(L'a', 1));
c2.insert(Mymultimap::make_value(L'b', 2));
c2.insert(Mymultimap::make_value(L'd', 4));
// display contents " [a 1] [b 2] [d 4]"
for each (Mymultimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("[a b c] != [a b c] is {0}",
c1 != c1);
System::Console::WriteLine("[a b c] != [a b d] is {0}",
c1 != c2);
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [d 4]
[a b c] != [a b c] is False
[a b c] != [a b d] is True
operator<
(multimap)
List less than comparison.
Syntax
template<typename Key,
typename Mapped>
bool operator<(multimap<Key, Mapped>% left,
multimap<Key, Mapped>% right);
Parameters
left
Left container to compare.
right
Right container to compare.
Remarks
The operator function returns true if, for the lowest position i
for which !(right[i] < left[i])
it's also true that left[i] < right[i]
. Otherwise, it returns left->size() < right->size()
. You use it to test whether left
is ordered before right
when the two multimaps are compared element by element.
Example
// cliext_multimap_operator_lt.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// assign to a new container
Mymultimap c2;
c2.insert(Mymultimap::make_value(L'a', 1));
c2.insert(Mymultimap::make_value(L'b', 2));
c2.insert(Mymultimap::make_value(L'd', 4));
// display contents " [a 1] [b 2] [d 4]"
for each (Mymultimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("[a b c] < [a b c] is {0}",
c1 < c1);
System::Console::WriteLine("[a b c] < [a b d] is {0}",
c1 < c2);
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [d 4]
[a b c] < [a b c] is False
[a b c] < [a b d] is True
operator<=
(multimap)
List less than or equal comparison.
Syntax
template<typename Key,
typename Mapped>
bool operator<=(multimap<Key, Mapped>% left,
multimap<Key, Mapped>% right);
Parameters
left
Left container to compare.
right
Right container to compare.
Remarks
The operator function returns !(right < left)
. You use it to test whether left
isn't ordered after right
when the two multimaps are compared element by element.
Example
// cliext_multimap_operator_le.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// assign to a new container
Mymultimap c2;
c2.insert(Mymultimap::make_value(L'a', 1));
c2.insert(Mymultimap::make_value(L'b', 2));
c2.insert(Mymultimap::make_value(L'd', 4));
// display contents " [a 1] [b 2] [d 4]"
for each (Mymultimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("[a b c] <= [a b c] is {0}",
c1 <= c1);
System::Console::WriteLine("[a b d] <= [a b c] is {0}",
c2 <= c1);
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [d 4]
[a b c] <= [a b c] is True
[a b d] <= [a b c] is False
operator==
(multimap)
List equal comparison.
Syntax
template<typename Key,
typename Mapped>
bool operator==(multimap<Key, Mapped>% left,
multimap<Key, Mapped>% right);
Parameters
left
Left container to compare.
right
Right container to compare.
Remarks
The operator function returns true only if the sequences controlled by left
and right
have the same length and, for each position i
, left[i] == right[i]
. You use it to test whether left
is ordered the same as right
when the two multimaps are compared element by element.
Example
// cliext_multimap_operator_eq.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// assign to a new container
Mymultimap c2;
c2.insert(Mymultimap::make_value(L'a', 1));
c2.insert(Mymultimap::make_value(L'b', 2));
c2.insert(Mymultimap::make_value(L'd', 4));
// display contents " [a 1] [b 2] [d 4]"
for each (Mymultimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("[a b c] == [a b c] is {0}",
c1 == c1);
System::Console::WriteLine("[a b c] == [a b d] is {0}",
c1 == c2);
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [d 4]
[a b c] == [a b c] is True
[a b c] == [a b d] is False
operator>
(multimap)
List greater than comparison.
Syntax
template<typename Key,
typename Mapped>
bool operator>(multimap<Key, Mapped>% left,
multimap<Key, Mapped>% right);
Parameters
left
Left container to compare.
right
Right container to compare.
Remarks
The operator function returns right < left
. You use it to test whether left
is ordered after right
when the two multimaps are compared element by element.
Example
// cliext_multimap_operator_gt.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// assign to a new container
Mymultimap c2;
c2.insert(Mymultimap::make_value(L'a', 1));
c2.insert(Mymultimap::make_value(L'b', 2));
c2.insert(Mymultimap::make_value(L'd', 4));
// display contents " [a 1] [b 2] [d 4]"
for each (Mymultimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("[a b c] > [a b c] is {0}",
c1 > c1);
System::Console::WriteLine("[a b d] > [a b c] is {0}",
c2 > c1);
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [d 4]
[a b c] > [a b c] is False
[a b d] > [a b c] is True
operator>=
(multimap)
List greater than or equal comparison.
Syntax
template<typename Key,
typename Mapped>
bool operator>=(multimap<Key, Mapped>% left,
multimap<Key, Mapped>% right);
Parameters
left
Left container to compare.
right
Right container to compare.
Remarks
The operator function returns !(left < right)
. You use it to test whether left
isn't ordered before right
when the two multimaps are compared element by element.
Example
// cliext_multimap_operator_ge.cpp
// compile with: /clr
#include <cliext/map>
typedef cliext::multimap<wchar_t, int> Mymultimap;
int main()
{
Mymultimap c1;
c1.insert(Mymultimap::make_value(L'a', 1));
c1.insert(Mymultimap::make_value(L'b', 2));
c1.insert(Mymultimap::make_value(L'c', 3));
// display contents " [a 1] [b 2] [c 3]"
for each (Mymultimap::value_type elem in c1)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
// assign to a new container
Mymultimap c2;
c2.insert(Mymultimap::make_value(L'a', 1));
c2.insert(Mymultimap::make_value(L'b', 2));
c2.insert(Mymultimap::make_value(L'd', 4));
// display contents " [a 1] [b 2] [d 4]"
for each (Mymultimap::value_type elem in c2)
System::Console::Write("[{0} {1}] ", elem->first, elem->second);
System::Console::WriteLine();
System::Console::WriteLine("[a b c] >= [a b c] is {0}",
c1 >= c1);
System::Console::WriteLine("[a b c] >= [a b d] is {0}",
c1 >= c2);
return (0);
}
[a 1] [b 2] [c 3]
[a 1] [b 2] [d 4]
[a b c] >= [a b c] is True
[a b c] >= [a b d] is False