multimap

Eine multimap ist einer map (map) sehr ähnlich.

Allerdings ist es hier erlaubt, Elemente mit dem selben Suchschlüssel (und bei Bedarf auch vollkommen identisch, also selber Schlüssel und selber Wert) mehrfach einzufügen.

Dazu ein kleines Beispielprogramm:

// Time-stamp: "02.11.04 00:14 mumap.cpp klaus@wachtler.de"
//
// demonstriert eine std::multimap
//
// 01.11.2004 kw   aus map.cpp übernommen
//

#include <functional>
#include <algorithm>
#include <iostream>
#include <map>
#include <cstring>
#include <stdexcept>
#include <utility>


void zeigealter( const std::pair<std::string,int> p )
{
  std::cout << p.first.c_str() // c_str() ist nur für VC6 nötig; Linux
                               // bzw. g++ 3.3.2 kann strings direkt
                               // ausgeben (p.first).
            << " ist " << p.second
            << " Jahre alt"
            << std::endl;
}

// Für VC6 + VC7 nötig (sonst können strings in der map nicht verglichen
// werden):
class stringcmp
{
public:
  // Diese Funktion soll true liefern, wenn s1 kleiner als s2 ist.
  // Mit VC6 kann man leider strings nicht direkt vergleichen; deshalb
  // kommt die gute alte Funktion strcmp() zum Zuge:
  bool operator()( const std::string &s1, const std::string &s2 ) const
  {
    return strcmp( s1.c_str(), s2.c_str() ) < 0;
  }
}; // class stringcmp...

// Unter Linux (g++ 3.3.2) kann der dritte Parameter (stringcmp) der
// multimap entfallen:
//typedef std::multimap< const std::string, int > container;
typedef std::multimap< const std::string, int, stringcmp > container;

int main( int nargs, char **args )
{
  try
  {
  }
  catch( std::exception &Fehler )
  {
    std::cerr << "Fehler: <" << Fehler.what() << "> in main()\n";
  }
  catch( ... )
  {
    std::cerr << "unbekannter Fehler in main()\n";
  }

  return 0;
} // main( int nargs, char **args )

Die Ausgabe davon:





AnyWare@Wachtler.de