일반적으로 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