532 Stimmen

Initialisierung einer statischen std::map<int, int> in C++

Wie kann man eine statische Karte richtig initialisieren? Brauchen wir eine statische Funktion, die sie initialisiert?

26voto

Drealmer Punkte 5398

Ich würde die Karte in ein statisches Objekt verpacken und den Initialisierungscode für die Karte in den Konstruktor dieses Objekts einfügen. Auf diese Weise sind Sie sicher, dass die Karte erstellt wird, bevor der Initialisierungscode ausgeführt wird.

20voto

user3826594 Punkte 199

Ich wollte nur eine reine C++ 98-Umgehung vorstellen:

#include <map>

std::map<std::string, std::string> aka;

struct akaInit
{
    akaInit()
    {
        aka[ "George" ] = "John";
        aka[ "Joe" ] = "Al";
        aka[ "Phil" ] = "Sue";
        aka[ "Smitty" ] = "Yando";
    }
} AkaInit;

14voto

Sie können es versuchen:

std::map <int, int> mymap = 
{
        std::pair <int, int> (1, 1),
        std::pair <int, int> (2, 2),
        std::pair <int, int> (2, 2)
};

10voto

Wenn Sie mit C++98 feststecken und boost nicht verwenden wollen, hier ist die Lösung, die ich verwende, wenn ich eine statische Karte initialisieren muss:

typedef std::pair< int, char > elemPair_t;
elemPair_t elemPairs[] = 
{
    elemPair_t( 1, 'a'), 
    elemPair_t( 3, 'b' ), 
    elemPair_t( 5, 'c' ), 
    elemPair_t( 7, 'd' )
};

const std::map< int, char > myMap( &elemPairs[ 0 ], &elemPairs[ sizeof( elemPairs ) / sizeof( elemPairs[ 0 ] ) ] );

8voto

eduffy Punkte 37562

Dies ist vergleichbar mit PierreBdR , ohne die Karte zu kopieren.

#include <map>

using namespace std;

bool create_map(map<int,int> &m)
{
  m[1] = 2;
  m[3] = 4;
  m[5] = 6;
  return true;
}

static map<int,int> m;
static bool _dummy = create_map (m);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X