기본적으로 내가 가지고,집합으로 값을 포함하는지도 사용
typedef map<std::string, set<double> > MAP_STRING_TO_SET;
집합을 복사하지 않고 새 값으로 집합을 업데이트 (값 추가 또는 제거)하는 가장 좋은 방법은 무엇입니까?
내가 볼 수있는 유일한 실행 가능한 솔루션은 map<std::string, set<double>* >
를 사용하는 것입니다.
감사
기본적으로 내가 가지고,집합으로 값을 포함하는지도 사용
typedef map<std::string, set<double> > MAP_STRING_TO_SET;
집합을 복사하지 않고 새 값으로 집합을 업데이트 (값 추가 또는 제거)하는 가장 좋은 방법은 무엇입니까?
내가 볼 수있는 유일한 실행 가능한 솔루션은 map<std::string, set<double>* >
를 사용하는 것입니다.
감사
집합은 초기화시에만 복사됩니다. 당신은지도 :: 연산자 []가 참조를 반환 이후
myMap[myString].insert(myDouble);
처럼 뭔가를 할 수 있습니다.
정말입니까? myMap [myString]은 세트의 임시 복사본을 만들지 않으니까 실제로지도의 세트를 업데이트하지 않겠습니까? –
아니요, 참조를 만듭니다. 임시 사본이 아닙니다. 그렇지 않으면지도가별로 쓸모 없게 될 것입니다. – rlbond
저는 스왑을 사용할 수 있습니다 - 예.
my_map["123"].swap(my_set)
당신에게 중요하지 않습니다
my_set
을 건드리지 제공. 그러면
my_map["123"]
의 이전 내용이
my_set
으로 바뀌고 빠릅니다.
인덱싱 연산자 []는 포함 된 set
에 대한 참조를 반환하므로 다른 변수와 마찬가지로 조작 할 수 있습니다. 개별 값을 추가/삭제하려면 또는 erase()
메서드를 사용할 수 있습니다. my_map["123"].insert(123)
.
지도에 새 세트를 지정할 때 복사가 실제로 수행됩니다 (예 :
my_map["123"]=my_set
은 my_set
사본을 생성합니다. 나중에 my_set
값을 사용할 필요가없는 경우 swap()
메서드를 사용하면 두 세트의 포인터를 뒤섞을 수 있습니다. 그러나 my_set
은 이전 my_map["123"]
의 내용을 갖습니다.
정교하게하십시오 ... –
또한이 작업을 수행 할 수 있습니다
map<std::string, set<double> >::iterator iter = myMap.find(myString);
if(iter != myMap.end())
{
iter->second.insert(myDouble);
}
당신이 그들이 복사되는 생각하는 이유는 무엇입니까? –