작동하지 않습니다. 이미 존재 그렇지 않은 경우삽입 내가 프로그램을 다음과 수행지도에 삽입 문제를 제공 한
답변
iter
여전히 map
의 end()
를 가리키는 것입니다 고급 회신
name_data_map.insert(pair<std::string,void *>(name,tmp_data));
name_data_map.insert(make_pair(name,tmp_data));
감사 : 또한 나는 삽입물의 두 가지 유형의 차이가 무엇인지 이해하려면 .
이 시도 :
static std::map<std::string,void *> name_data_map;
std::map<std::string,void *>::iterator iter=name_data_map.find(name) ;
if (iter == name_data_map.end())
{
tmp_data = (void *)malloc(mt_get_dkstat_size());
errorCode = getsproxy(tmp_data, name);
// Fix:
std::pair<std::map<std::string,void>::iterator,bool> ret;
ret = name_data_map.insert(pair<std::string,void *>(name,tmp_data));
iter = ret.first;
}
memcpy(*data, iter->second, mt_get_dkstat_size());
편집 : 두 가지 방법의 차이점에 대한 귀하의 질문에 대답하기 위해, 그들은 기본적으로 동일 make_pair
는 다음과 같이 구현과 같이
template <class T1,class T2>
pair<T1,T2> make_pair (T1 x, T2 y)
{
return (pair<T1,T2>(x,y));
}
답장 오류를 보내 주셔서 감사합니다 :: 호출은 "연산자 ="에 대한 매개 변수 목록과 일치하지 않습니다. "암시 적 std :: _ 트리
사과는'insert' 메소드가 첫 번째 요소로서 반복자를 가진 쌍을 반환한다는 것을 사과드립니다 - 나는 나의 대답을 편집했습니다. – trojanfoe
대신이 시도 :
void *tmp_data;
if( iter == name_data_map.end()) {
tmp_data = (void *) malloc (mt_get_dkstat_size());
errorCode = getsproxy(tmp_data , name);
name_data_map[name] = tmp_data;
} else {
tmp_data = iter->second;
}
memcpy(*data, tmp_data, mt_get_dkstat_size()) ;
원래 코드의 문제는 예 : .end()
인 경우에도 iter
입니다.
또는,
insert
대신
operator[]
의 사용을 선호하는 경우,이 시도 :
auto pair = name_data_map.insert(std::make_pair(name, (void*)0));
if(pair.second) {
pair.first->second = (void*)malloc(mt_get_dkstat_size());
errorCode = getxproxy(tmp_data, name);
}
memcpy(*data, pair.first->second, mt_get_dkstat_size()) ;
이 당신에게 삽입 당 하나의 로그 (N) 검색을 저장, 하나 개의 작업에 .find()
및 .insert()
을 결합합니다.
- 1. SQL ASP.NET 문제를 삽입
- 2. 쿼리 문제를 삽입 하시겠습니까?
- 3. 델파이 TClientDataSet (삽입) 문제를
- 4. 이벤트 (-)에 내가 실험으로 함께 다음과 같은 코드를 삽입 한
- 5. joomla에서 아코디언을 삽입 한 형태로 jum에서 삽입
- 6. 삽입 내가 코드를 PHP
- 7. 하루에 한 번만 삽입
- 8. SQLite Python 삽입 - 잘못된 바인딩 수 제공
- 9. 삽입 내가 MySQL의의 절차가
- 10. MySQL 고유 한 해시 삽입
- 11. 삽입
- 12. 삽입
- 13. () 삽입 -
- 14. linq-to-sql 문제를 삽입 하시겠습니까?
- 15. 삽입
- 16. 삽입
- 17. 삽입 한 테이블의 또 다른
- 18. 삽입 VS (선택 및 삽입)
- 19. 삽입 -
- 20. 삽입
- 21. 삽입
- 22. 삽입
- 23. DataGridview에서 한 줄씩 데이터 삽입
- 24. 마지막으로 삽입 한 필드의 ID입니다.
- 25. 테이블에 행을 삽입 한 날짜
- 26. , 내가 하나를 삽입 어떻게? "paredit.vim을 해제하지 않고
- 27. 내가 삽입 한 다음 DB에 테이블을 만들려고하고있어, MySQL을 사용하지만,
- 28. 삽입
- 29. 삽입
- 30. 삽입
'memcpy (* data, ...);에서'* data' 란 무엇입니까? – hmjd
지도의 값 유형은'std :: pair'입니다. –
* 데이터 유형 : void ** data. 참조로 전화하십시오. – user1044923