2016-10-21 38 views
3

給定istream_iterator<int>multimap<char, int> output可以複製到多圖中

我想將所有值複製到output'a'鍵中。 如何處理這個問題的最佳方法?

我曾試圖用:

transform(
    istream_iterator<int>(input), 
    istream_iterator<int>(), 
    begin(output), 
    [](const auto value){ 
     return make_pair('a', value); 
    } 
) 

但我得到的錯誤:

error: assignment of read-only member std::pair<const char, int>::first

我想這意味着我不能寫begin(output)。我唯一的選擇是使用for_each嗎?

回答

7

你很接近,但你應該使用std::inserter

​​

第二個參數是一個提示,但對於multimap它會被忽略。但是,界面要求您提供它。

+0

這超出了原始問題的範圍,但爲什麼'multimap'提供'begin'如果我不能使用它呢?爲什麼不提供'cbegin'? –

+2

@JonathanMee你可以使用它,而不是在這個操作。實際的'value_type'是'std :: pair ',你可以使用'begin(m)'來修改這個值。您無法覆蓋密鑰,因爲那樣您必須使用地圖。如果你看看'std :: set',那裏只有一個const鍵,你會注意到它沒有提供非const的迭代器。 – krzaq

+1

啊,所以你說我可以自由修改由'multimap :: begin'返回的值,但不是鍵值,這也意味着我無法指定。我明白了,謝謝。因此,爲了繼續超出範圍問題,如果'output'已經有內容,我需要做'inserter(output,inserter.lower_bound('a'))'是否正確? –

相關問題