私がここで間違っていることを見て、私の深みから少し出ているように見えないようです。C++ 11レンジベースのマルチマップループ - 非constペアを返しません
私が持っているものは、ベクトルとマルチマップを含むいくつかのデータ構造です。
元のデータへのポインタを含む2番目のベクトル/マルチマップを作成して、2番目のベクトル/マップを編集すると元のデータが変更されるようにします。この理由は、リストがいくつかの基準に基づくorigの一時的なサブセットであるということです。
は、まず、私はベクトルでこれを試してみました、動作しているようですが、ここでは実施例である:ここではstd::vector<std::string> strVect;
strVect.push_back("test1");
strVect.push_back("test2");
strVect.push_back("test3");
std::vector<std::string *>strpVect;
for (std::string &str : strVect)
{
strpVect.push_back(&str);
}
、strVectでオリジナルにstrpVectポイントの要素。私はこれを実行すると、私はそれのconst作る場合、それは動作します、私はエラーinvalid init of non-const reference of type std::pair....
を得る今
std::multimap<int, std::string> strMap;
strMap.insert(std::pair<int, std::string>(1, "test1"));
strMap.insert(std::pair<int, std::string>(2, "test2"));
strMap.insert(std::pair<int, std::string>(3, "test3"));
std::multimap<int, std::string *>strpMap;
for (std::pair<int, std::string> &val : strMap) // <<<<< error here
{
strpMap.insert(std::pair<int, std::string *>(val.first, &val.second));
}
:
は、今私はmultimapのためのものと同じ種類のをやりたい
std::multimap<int, std::string> strMap;
strMap.insert(std::pair<int, std::string>(1, "test1"));
strMap.insert(std::pair<int, std::string>(2, "test2"));
strMap.insert(std::pair<int, std::string>(3, "test3"));
std::multimap<int, std::string *>strpMap;
for (const std::pair<int, std::string> &val : strMap)
{
strpMap.insert(std::pair<int, std::string *>(val.first, &val.second)); // <<<<< error here
}
しかし、私のインサートでは(明らかに私のために)エラーが出ますが、内部の値を変更したいのでconstを挿入したくありません。私はこれを私のコーディングの失敗として見ます:(
すごくうれしいよ、おかげで:)私は "auto"キーワークが好きなだけ、それは2つの面倒な副作用があります:1.私はしばしば何が起こっているのか分かりませんon !, 2.コード補完の停止(少なくとも私のIDEでは)。 psはそれをマークするために6分を待たなければなりません...:o –
人は自動車について異なる意見を持つことができます。その場合ここでは、なぜautoを使用するための主要な例の一つです。 'const std :: pair <...>&'は 'auto&'がコピー操作をしないうちにコピー操作を行います。 – Hayt
@Hay私は「この場合」のように私は一種同意しません...もし私が自動車を使ったなら、私は誰も賢くないでしょう。今私は正しいタイプを使用していると私はそれを理解しています:) - しかし、それを働くことの面では、私はあなたのポイントを参照してください - 私はとにかくupvoteを行う:) –