C++/Map Multimap/map update

Материал из C\C++ эксперт
Перейти к: навигация, поиск

Update a key value

  
 
/* The following code example is taken from the book
 * "The C++ Standard Library - A Tutorial and Reference"
 * by Nicolai M. Josuttis, Addison-Wesley, 1999
 *
 * (C) Copyright Nicolai M. Josuttis 1999.
 * Permission to copy, use, modify, sell and distribute this software
 * is granted provided this copyright notice appears in all copies.
 * This software is provided "as is" without express or implied
 * warranty, and with no claim as to its suitability for any purpose.
 */
#include <iostream>
#include <map>
#include <string>
using namespace std;
int main()
{
    /* create map / associative array
     * - keys are strings
     * - values are floats
     */
    typedef map<string,float> StringFloatMap;
    StringFloatMap stocks;      // create empty container
    // insert some elements
    stocks["BASF"] = 369.50;
    stocks["VW"] = 413.50;
    stocks["Daimler"] = 819.00;
    stocks["BMW"] = 834.00;
    stocks["Siemens"] = 842.20;
    // print all elements
    StringFloatMap::iterator pos;
    for (pos = stocks.begin(); pos != stocks.end(); ++pos) {
        cout << "stock: " << pos->first << "\t"
             << "price: " << pos->second << endl;
    }
    cout << endl;

    /* rename key from "VW" to "Volkswagen"
     * - only provided by exchanging element
     */
    stocks["Volkswagen"] = stocks["VW"];

    // print all elements
    for (pos = stocks.begin(); pos != stocks.end(); ++pos) {
        cout << "stock: " << pos->first << "\t"
             << "price: " << pos->second << endl;
    }
    cout << endl;
}
/* 
stock: BASF     price: 369.5
stock: BMW      price: 834
stock: Daimler  price: 819
stock: Siemens  price: 842.2
stock: VW       price: 413.5
stock: BASF     price: 369.5
stock: BMW      price: 834
stock: Daimler  price: 819
stock: Siemens  price: 842.2
stock: VW       price: 413.5
stock: Volkswagen       price: 413.5

 */


Use push_back to add object to vector

  
#include <algorithm>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <string>
#include <utility>
#include <vector>
using namespace std;
class PC{
   public:
   enum PC_type { Dell, HP, IBM, Compaq };
   PC( PC_type appliance = Dell, int model = 220,int serial = 0 );
   bool operator<( const PC& rhs ) const;
   PC_type appliance() const;
   int model() const;
   string name() const;
   void print() const;
   int serial() const;
   private:
   PC_type appliance_;
   int model_;
   int serial_;
};
inline
PC::PC( PC::PC_type appliance, int model,
   int serial )
   : appliance_( appliance ), model_( model ), serial_( serial )
{} 
inline
bool PC::operator<( const PC& rhs ) const
{ return appliance() < rhs.appliance() ||
   ( appliance() == rhs.appliance() && model() < rhs.model() );
}
inline
PC::PC_type PC::appliance() const
{ return appliance_; }
inline
int PC::model() const
{ return model_; }
string PC::name() const
{
   string what;
   switch( appliance() )
   {
      case Dell:    what = "Dell";              break;
      case HP:      what = "HP";                break;
      case IBM:     what = "IBM";               break;
      case Compaq:  what = "Compaq";            break;
      default:      what = "Unknown appliance"; break;
   }
   return what;
}
inline
void PC::print() const
{
   char oldfill = cout.fill();
   cout << name() << " - Model "
        << model() << ", Serial number " 
        << serial() << endl;
}
inline
int PC::serial() const
{ return serial_; }
bool greater_model( const pair<PC::PC_type,PC> p,int min_model );
int main( )
{
   const PC::PC_type kind[] = { PC::IBM,PC::Dell,PC::HP };
   vector<PC> v;
   for( int i = 0; i < 3; ++i )
      v.push_back( PC( kind[i], i, i ) );

}