一般に、STLコンテナは参照などの非CopyAssignable
タイプを保持できません。コピーを行わないようにコンテナを構築すると、コードは有効です。 gcc-7.2のいくつかのバージョンでstd=c++11
とc++14
とコンパイルされますが、以下のものが有効ですか、それともライブラリのアップグレードで破損すると思いますか?この場合、reference_wrapper
を使用する必要がありますか?参照を保持しているunordered_mapを構築するのは合法ですか?
#include <unordered_map>
struct S {};
void use (S&) {}
void test() {
S s1, s2;
const std::unordered_map<int, S&> m{{0, s1}, {1, s2}};
use(m.at(0));
}
編集私は本当に標準への参照が必要です。コンパイラ/標準ライブラリの標準準拠の更新がコードを破る可能性がある場合は、Works for meも十分ではありません。だから"unordered_map with reference as value"の答えは私には十分ではありません。
私は、この特定のユースケースのために、私は答えを見つけた自分自身を考える
[値として参照付きの順序付けられていない\ _map]の複製が可能です(https://stackoverflow.com/questions/24719044/unordered-map-with-reference-as-value) – davidhigh
一般的なコンテナでは、コンストラクションだけでなくCopyAssignableも必要です、多くのアルゴリズムも期待どおりに動作しない可能性があります – user463035818