2016-12-16 35 views
10

C++ standart kullanılarak std::map yapıcı tanımlayan bir std::initializer_list:std :: map başlatıcısı liste yapıcısı

map(std::initializer_list<value_type> init, const Allocator&); 

Ancak burada başlatıcı listesi yinelenen anahtarlar içeriyorsa ne olur tanımlanır? İlk anahtar seçti mi, yoksa son mu? Örneğin:

std::map<std::string, int> my_map { 
    {"a", 1}, 
    {"a", 2} 
}; 

Uygulamada Harita artık içerecek şekilde, bu insert() gibi davranır görünüyor {a: 1}. Bununla birlikte, C++ standardında bununla ilgili hiçbir şey bulamadım.

cevap

5

N4296 (~ C++ 14)

Tablo 102 - İlişkili konteyner şartlar

X(il);

| X(il.begin(), il.end()) ile aynı. Boş kabı oluşturur ve bunu aralığın [i, j) elemanları ekler;:

Etkileri: yineleyici ctor için yukarıda tabloda sonra

, , bir karşılaştırma nesnesi olarak c kullanır.

ve

i ve j, [i,j) geçerli bir aralık gösterir giriş yineleyici gereksinimlerini karşılamak ve value_type örtük olarak dönüştürülebilir unsurların, burada "ve unsurları ekler"

Note , insert işlevini belirtmek için işaretlendi, ancak sanırım bunu böyle yorumlayabiliriz. Ayrıca, i ve j'un girdi yineleyicileri olduğunu unutmayın, bu nedenle sırayla taşınmalıdır.

.

(eşdeğer tabloları tüm

il var, çünkü bu bilgileri bulmak için biraz daha serttir üstlerindeki initializer_list<value_type>

türünde bir nesne ifade, bu yüzden initializer_list arayarak bulunabilir ancak bu tablo için sözcük iki satırda bölünür, aradaki kısa çizgiyle birlikte.)

+3

Teknik olarak, en azından alıntı yapılan kısımlardan, standardın hangi konumda olduğunu veya der elemanlar eklenirdi. – user2079303

+0

@ user2079303 Daha iyi? – BoBTFish

+2

Bunun yeterli olup olmadığından emin değilim.Geçilen yineleyici sadece bir giriş yineleyicisi olduğunda, sırayla eklenmesi gerekir, ancak initializer_list yineleyicisi rasgele erişim yineleyicisi ve farklı yineleyici türleri için uzmanlığı yasaklayan bir kural görmüyorum. – user2079303

İlgili konular