Jika ada, seperti apa std::map
daftar penginisialisasi yang diperluas?
Saya telah mencoba beberapa kombinasi ... well, semua yang dapat saya pikirkan dengan GCC 4.4, tetapi tidak menemukan apa pun yang dikompilasi.
Jika ada, seperti apa std::map
daftar penginisialisasi yang diperluas?
Saya telah mencoba beberapa kombinasi ... well, semua yang dapat saya pikirkan dengan GCC 4.4, tetapi tidak menemukan apa pun yang dikompilasi.
Jawaban:
Itu ada dan bekerja dengan baik:
std::map <int, std::string> x
{
std::make_pair (42, "foo"),
std::make_pair (3, "bar")
};
Ingatlah bahwa tipe nilai peta adalah pair <const key_type, mapped_type>
, jadi pada dasarnya Anda memerlukan daftar pasangan dengan tipe yang sama atau dapat dikonversi.
Dengan inisialisasi terpadu dengan std :: pair, kode menjadi lebih sederhana
std::map <int, std::string> x {
{ 42, "foo" },
{ 3, "bar" }
};
map( std::initializer_list<value_type> init, const Compare& comp = Compare(), const Allocator& alloc = Allocator() );
tersedia sejak C ++ 11 , dan map( std::initializer_list<value_type> init, const Allocator& );
hanya tersedia sejak C ++ 14 . Referensi: std :: map
Saya ingin menambahkan jawaban doublep bahwa inisialisasi daftar juga berfungsi untuk peta bersarang. Misalnya, jika Anda memiliki nilai std::map
with std::map
, maka Anda dapat menginisialisasinya dengan cara berikut (pastikan Anda tidak tenggelam dalam tanda kurung kurawal):
int main() {
std::map<int, std::map<std::string, double>> myMap{
{1, {{"a", 1.0}, {"b", 2.0}}}, {3, {{"c", 3.0}, {"d", 4.0}, {"e", 5.0}}}
};
// C++17: Range-based for loops with structured binding.
for (auto const &[k1, v1] : myMap) {
std::cout << k1 << " =>";
for (auto const &[k2, v2] : v1)
std::cout << " " << k2 << "->" << v2;
std::cout << std::endl;
}
return 0;
}
Keluaran:
1 => a-> 1 b-> 2
3 => c-> 3 d-> 4 e-> 5