Udostępnij za pośrednictwem


map::max_size, map::clear, map::erase, and map::size

Illustrates how to use the map::max_size, map::clear, map::erase, and map::size Standard Template Library (STL) functions in Visual C++.

size_type max_size( ) const; 
void clear( ) const; 
bool empty( ) const; 
iterator erase(
   iterator First,
   iterator Last
);
size_type size( ) const;
A::reference operator[](         // A is the allocator
   const Key& Key
); 
iterator map::begin( );
iterator map::end( );
iterator map::find(
   const Key& Key
);

Remarks

Note

The class/parameter names in the prototype do not match the version in the header file. Some have been modified to improve readability.

The following sample creates a map of strings to ints and fills it first with a map of month names to month numbers, and then empties and refills it with a map of weekday names to corresponding ints.

Example

// map_max_size_etc_sample.cpp
// compile with: /EHsc
//
// Functions:    iterator map::max_size();
//               void clear() const;
//               bool empty() const;
//               iterator erase(iterator first, iterator last);
//               size_type size() const;
//               A::reference operator[](const Key& key);
//               iterator map::begin();
//               iterator map::end();
//               iterator map::find(const Key& key);

#pragma warning(disable:4786)

#include <iostream>
#include <string>
#include <map>

using namespace std ;

typedef map<string, int> STRING2INT;

int main()
{
   STRING2INT MyMap;
   STRING2INT::iterator MyIterator;
   string MyBuffer;

   // print the maximum number of <key,data> pairs that MyMap can hold
   cout << "MyMap is capable of holding " << MyMap.max_size()
        << " <string,int> pairs" << endl;

   if (!MyMap.empty())
      cout << "MyMap has " << MyMap.size() << " entries" << endl;
   else
      cout << "MyMap is empty" << endl;
   
   cout << "Entering new entries in MyMap" << endl;
   // Fill in MyMap with the months of the year, mapped to their number
   // January - 1, February - 2, etc. using operator[].
   MyMap["January"] = 1;
   MyMap["February"] = 2;
   MyMap["March"] = 3;
   MyMap["April"] = 4;
   MyMap["May"] = 5;
   MyMap["June"] = 6;
   MyMap["July"] = 7;
   MyMap["August"] = 8;
   MyMap["September"] = 9;
   MyMap["October"] = 10;
   MyMap["November"] = 11;
   MyMap["December"] = 12;

   if (!MyMap.empty())
      cout << "MyMap has " << MyMap.size() << " entries" << endl;
   else
      cout << "MyMap is empty" << endl;

   // Ask the user for a month of the year and print the number
   // that corresponds to the month entered
   MyIterator = MyMap.end();
   while (MyIterator == MyMap.end())
   {
      cout << endl << "Enter a Month: ";
      cin >> MyBuffer;
      if ((MyIterator = MyMap.find(MyBuffer)) != MyMap.end())
         cout << (*MyIterator).first << " is Month Number "
              << (*MyIterator).second << endl;
      else
         cout << "Enter a Valid Month (example: March)" << endl;
   }

   // empty MyMap - note that clear simply calls erase(begin(),end());
   MyMap.clear();

   if (!MyMap.empty())
      cout << "MyMap has " << MyMap.size() << " entries" << endl;
   else
      cout << "MyMap is empty" << endl;
   
   cout << "Entering new entries in MyMap" << endl;
   // Fill MyMap with the days of the week, each mapped to an int
   MyMap["Monday"] = 1;
   MyMap["Tuesday"] = 2;
   MyMap["Wednesday"] = 3;
   MyMap["Thursday"] = 4;
   MyMap["Friday"] = 5;
   MyMap["Saturday"] = 6;
   MyMap["Sunday"] = 7;

   if (!MyMap.empty())
      cout << "MyMap has " << MyMap.size() << " entries" << endl;
   else
      cout << "MyMap is empty" << endl;

   // Ask the user for a day of the week and print the number
   // that corresponds to the day entered
   MyIterator = MyMap.end();
   while (MyIterator == MyMap.end())
   {
      cout << endl << "Enter a Day of the Week: ";
      cin >> MyBuffer;
      if ((MyIterator = MyMap.find(MyBuffer)) != MyMap.end())
         cout << (*MyIterator).first << " is Day Number "
              << (*MyIterator).second << endl;
      else
         cout << "Enter a Valid Day of the Week(example: Monday)" << endl;
   }

   // Now clear MyMap again - this time using erase instead of clear
   MyMap.erase(MyMap.begin(), MyMap.end());

   if (!MyMap.empty())
      cout << "MyMap has " << MyMap.size() << " entries" << endl;
   else
      cout << "MyMap is empty" << endl;
}

Input

May
Monday

Sample Output

MyMap is capable of holding 134217727 <string,int> pairs
MyMap is empty
Entering new entries in MyMap
MyMap has 12 entries

Enter a Month: May
May is Month Number 5
MyMap is empty
Entering new entries in MyMap
MyMap has 7 entries

Enter a Day of the Week: Monday
Monday is Day Number 1
MyMap is empty

Requirements

Header: <map>

See Also

Concepts

Standard Template Library Samples