Değerin türünü değiştirmeniz gerekiyor mu? Değilse ve değeriniz atandığında, veya eşdeğerli hana::at_key(map, key) = new_value
'u kullanabilirsiniz, hana::at_key
bir başvuru döndürür.
Değiştirilecek değerin türüne ihtiyacınız varsa, bu daha da zor olur. Yerinde herhangi bir şey yapamayacağız çünkü değeri değiştirdikten sonra haritanın türü, değeri değiştirmeden önce türünden farklı olacaktır. Bu nedenle, yeni bir harita veya bu haritanın bir çeşit değiştirilmiş görünümü oluşturmalıyız (ancak şu anda görünümler desteklenmemektedir). erase_key
ve insert
kullanımı gerçekten iki haritanın oluşturulmasına neden olur, bu da verimsiz olur. Bunun yerine, aynısını sağlayacak bir çeşit update
işlevini sağlayabilirdik, ancak haritanın yalnızca bir kopyasını oluşturabilirdik (sonuç). Kendi fonksiyonumuzu sağlayarak derleme süreleri açısından erase_key
+ insert
'dan daha iyisini yapabileceğimize inanıyorum. İsteğinizi takip etmek için this issue'u açtım, çünkü böyle bir şey sağlamanın önemli olduğunu düşünüyorum; Teşekkürler.
Son olarak, Jason söylediklerini yorum yapmak istediğiniz: Başka bir kayda göre
, belki hana :: haritası olması gereken bir Funktör.
hana::map
bir funktor yapılmış olabilir, ama yine de Funktör yasalarına uygun
transform
haritanın tuşlara dokunduğunuzda olabilir emin değilim. Durum böyle değilse, "anahtarın bir miktar yüklemeyi karşılaması durumunda değeri XXX ile değiştirin" diyemezsiniz.
hana::replace_if
.
hana::transform
temel olarak temel anahtar/değer çiftleri dizisini temelde dönüştürdüyse kanunları yıkacak işlevlerin bir örneğini bulmak için denedim (ancak şu ana kadar başarısız oldum), ancak sezgim böyle bir örnek bulmak mümkün. # 278 sayısında devam edecek.
Hana :: hash (hana :: first (new_pair)) == hana :: hash (hana :: first (p)) 'olması gereken hana :: equal (hana :: ilk (new_pair), hana :: ilk (p)) '. Aksi halde, hash eşlemi haritada başka bir anahtarla çarpışan bir anahtarla ilişkilendirilmiş olan değeri değiştirirseniz, anahtarlar farklı olsa bile aynı karma değeri paylaşan tüm anahtarların değerini değiştirirsiniz. Temel olarak aynı gruptaki tüm tuşların değerini değiştirirsiniz. Ve bir nitpick, ancak 'hana :: equal' kullanıldığında, jenerik kod için '==' daha iyi olabilir, çünkü e. 'Std :: integral_constant'. –
Ah, doğru. Örneğimi düzelttim ve değerin basitçe değişmediğini göstermek için değerin türünü değiştirdim. –