Microsoft KB Archive/157593

= How to use map::max_size, clear, erase, size STL functions in Visual C++ =

Article ID: 157593

Article Last Modified on 8/11/2005

-

APPLIES TO

 The Standard C++ Library, when used with:  Microsoft Visual C++ 4.2 Enterprise Edition

 Microsoft Visual C++ 5.0 Enterprise Edition

 Microsoft Visual C++ 6.0 Enterprise Edition

 Microsoft Visual C++ 4.2 Professional Edition</li></ul>

 Microsoft Visual C++ 5.0 Professional Edition</li></ul>

 Microsoft Visual C++ 6.0 Professional Edition</li></ul>

 Microsoft Visual C++ 6.0 Standard Edition</li></ul>

 Microsoft Visual C++ .NET 2002 Standard Edition</li></ul>

 Microsoft Visual C++ .NET 2003 Standard Edition</li></ul> </li></ul>

-

<div class="notice_section">

This article was previously published under Q157593

<div class="notice_section">

<div class="notice_section">

Note Microsoft Visual C++ NET (2002) supported both the managed code model that is provided by the .NET Framework and the unmanaged native Windows code model. The information in this article applies to unmanaged Visual C++ code only.

<div class="summary_section">

SUMMARY
The sample code below illustrates how to use the map::max_size, map::clear, map::empty, map::erase, map::size, map::operator[], map::end, map::begin, map::find, map::iterator, map::value_type STL symbols in Visual C++.

<div class="moreinformation_section">

Prototypes
size_type max_size const; void clear const; bool empty const; iterator erase(iterator first, iterator last); size_type size const; A::reference operator[](const Key& key);   // A is the allocator iterator map::begin; iterator map::end; iterator map::find(const Key& key); Note The class/parameter names in the prototypes may not match the version in the header file. Some have been modified to improve readability.

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

Sample code
////////////////////////////////////////////////////////////////////// // // Compile options needed: None // // : main.cpp // // 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); // // Written by Rick Troemel // of Microsoft Product Support Services, // Copyright (c) 1996 Microsoft Corporation. All rights reserved. //////////////////////////////////////////////////////////////////////


 * 1) pragma warning(disable:4786)


 * 1) include
 * 2) include
 * 3) include

using namespace std; // std c++ libs implemented in std #endif
 * 1) if _MSC_VER > 1020  // if VC++ version is > 4.2

typedef map<string, int, less, allocator > STRING2INT;

void 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 << "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 << "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;

} Program Output is (User input is shown inside []): <pre class="fixed_text">MyMap is capable of holding 1073741823 <string,int> pairs MyMap is empty Entering new entries in MyMap MyMap has 12 entries Enter a Month :[April] April is Month Number 4 MyMap is empty Entering new entries in MyMap MyMap has 7 entries Enter a Day of the Week:[Friday] Enter a Valid Day of the Week(example: Monday) Enter a Day of the Week:[Friday] Friday is Day Number 5 MyMap is empty

<div class="references_section">