2015-06-02 15 views
5

std::map'u n anahtarıyla başlatmak mümkün olup olmadığını merak ediyorum: n'un önceden tanımlanmış olduğu değer elemanları (dizi başlatmasına benzer bir şey: array[n]).std :: haritasının n tuşları ile başlatılması mümkün mü?

Böyle bir kurucunun std::map için var olduğunun farkında değilim, ancak her ihtimale karşı olabileceğimi düşündüm.

Alternatif Ne yapabiliriz ki geçerli:

#include <iostream> 
#include <map> 

int main() 
{ 
    int n = 5; 
    std::map<int,double> randomMap; 

    for(int i = 0; i < n; ++i) 
    { 
     randomMap.insert({i,0.9}); 
    } 

    for(auto j: randomMap) 
    { 
     std::cout<<"key: " << j.first <<"\tvalue: " << j.second << std::endl; 
    } 

    return 0; 
} 
+1

Initializer liste yapıcısı – 911

+1

Eğer' örneğin bir başlatıcı listesini kullanabilirsiniz bir şey gibi arıyor std :: harita randomMap (5, 0 .9); Bu mevcut değil. –

+1

@black Tuşların böyle bir kurucu için her eleman için ne olmasını beklerdiniz? Anahtar, kullanıcı tanımlı bir sınıfsa ve yalnızca sayısal bir ilkel değilse ne olur? – CoryKramer

cevap

11

Tabii,

int main() 
{ 
    std::map<int, double> randomMap {{0, 1.5}, {3, 2.7}, {9, 1.9}}; 
    for (auto const& element : randomMap) 
    { 
     std::cout << "key: " << element.first << " value: " << element.second << std::endl; 
    } 
} 

Output

key: 0 value: 1.5 
key: 3 value: 2.7 
key: 9 value: 1.9 
+0

Sanırım C++ 11'den beri mevcut olduğuna işaret etmeye değer. – edmz

+4

Elbette, ancak OP zaten "auto" kullanıyor, bu yüzden zaten C++ 11 ile bir derleyici kullanmakta olduklarını varsaymak adil. Aynı zamanda 2015 yılı, çoğu insanın en azından C++ 11 kullanıyor olmasını umardım, ya da olmasalar da, özellikle kendi sorularında bahsetmeleri gerekir. – CoryKramer