2016-04-08 29 views
2

Ben şu var:std :: map öğelerinin std :: vektörünü nasıl başlatabilirim?

#include <vector> 
#include <map> 
#include <string> 

int main() { 
    std::vector<std::map<std::string, double>> data = {{"close", 14.4}, {"close", 15.6}}; 

    return 0; 
} 

Ve derlemeye çalıştığınızda, aşağıdaki hatayı alıyorum:

:

g++ -std=c++11 -Wall -pedantic ./test.cpp

./test.cpp:6:49: error: no matching constructor for initialization of 'std::vector >' (aka 'vector, allocator >, double> >') std::vector> data = {{"close", 14.4}, {"close", 15.6}};

+3

std :: map'i std :: çiftlerinin bir listesi olarak düşünmeye çalışın, şunu deneyin: '{{{" close ", 14.4}}, {{" close ", 15.6}}}'. Her biri 1 çift olmak üzere 2 haritanın bir vektörü. – Chad

+1

@Chad Answers, cevap kutusunda değil, yorum kutusuna aittir. – Barry

+0

@Barry Tamamen çözülmüş cevaplar cevap kutusuna ait. İyi bir cevap yazmak istemedim, bu yüzden bir yorum yazdım. – Chad

cevap

5

Her element/çifti için parantez fazladan bir çift ihtiyacımız
std::vector<std::map<std::string, double>> data = {{{"close", 14.4}}, {{"close", 15.6}}}; 
                ^   ^^   ^

std::map öğeleri std::pair<const std::string, double> örneğinizde std::pair<const key_type, value_type> türünde olduğundan fazladan parantez gereklidir. Bu nedenle, std::pair öğelerinin başlatılmasını derleyiciye göstermek için fazladan bir çift ayraç gerekir.

4

Kullanım 3 yerine söylediklerini Chad 2.

std::vector<std::map<std::string, double>> data = {{{"close", 14.4}}, {{"close", 15.6}}}; 

Its arasında parantez.