방황하고있었습니다. std::shared_ptr
을지도 키로 사용할 수 있습니까?std shared_ptr을 std :: map 키로 사용
더 구체적으로는 포인터의 참조 카운터가지도에 할당되었을 때의 값과 다를 수 있습니다.
지도에서 올바르게 식별됩니까?
방황하고있었습니다. std::shared_ptr
을지도 키로 사용할 수 있습니까?std shared_ptr을 std :: map 키로 사용
더 구체적으로는 포인터의 참조 카운터가지도에 할당되었을 때의 값과 다를 수 있습니다.
지도에서 올바르게 식별됩니까?
가능합니다. std::shared_ptr
은지도 키 사용에 적합한 방식으로 정의 된 operator<
입니다. 특히 포인터 값만이 참조 카운트가 아닌 비교됩니다.
네, 할 수는 있지만 조심하세요. operator<
은 포인터의 관점에서 정의 된 것이지 지적 된 점이 아닙니다. 당신이 당신의 사용 사례에 따라 표준 : shared_ptr``의 "앨리어싱 생성자"를 사용하는 경우는 [`표준 : owner_less` 사용을 고려할 수 있음을
#include <memory>
#include <map>
#include <string>
#include <iostream>
int main() {
std::map<std::shared_ptr<std::string>,std::string> m;
std::shared_ptr<std::string> keyRef=std::make_shared<std::string>("Hello");
std::shared_ptr<std::string> key2Ref=std::make_shared<std::string>("Hello");
m[keyRef]="World";
std::cout << *keyRef << "=" << m[keyRef] << std::endl;
std::cout << *key2Ref << "=" << m[key2Ref] << std::endl;
}
인쇄
Hello=World
Hello=
주 ] (http://en.cppreference.com/w/cpp/memory/owner_less)지도의 비교 functor로. 이것은'shared_ptr'에 의해 직접 지시 된 하위 객체보다는 오히려 전체 객체에 대한 포인터에 기반하여 당신을 정렬하게 할 것입니다. – tomjakubowski