2017-12-26 33 views
0
#include <map> 
#include <set> 
using namespace std; 
map <string, set<pair<int, set<int>>>> dictonary; 

int s() 
{ 
    for (auto & i : dictonary["abc"]) 
    { 
     i.second.insert(2); //error C2663 
    } 
} 

C2663 : '표준 : _ 트리> :: 삽입'5 오버로드 법적 없다 'this'포인터에 대한 변환.C2663 : '표준 : _ 트리> :: 삽입'5 오버로드 '이'포인터에 대한 법적 변환이 없습니다

은 삽입이 금지 된 컴파일러 const으로 간주됩니다.

버그가 아닌 경우 어떻게 조작 할 수 있습니까?

+2

'std :: set' 이터레이터는'const' 액세스 만 허용합니다. 다른 컨테이너를 제거/수정/재 삽입하거나 다른 컨테이너를 사용해야합니다. 만약 당신이 그것을 반복하면서'set'을 수정할 수 있다면, 그 순서에 영향을 미칠 수 있습니다. – Praetorian

+0

집합에서 해당 항목을 제거하고 업데이트 된 값이있는 새 항목을 삽입해야합니다. 세트는 스스로 재구성해야합니다. 세트의 내부를 둘러 볼 수는 없습니다. – PaulMcKenzie

답변

0

버그가 아닌 경우 어떻게 조작 할 수 있습니까?

당신은 데이터가 정렬되고 수정 불변을 무효화하는 것처럼 이미 자리에 std::set에 삽입되는 값을 변경할 수 없습니다. std::set