2009-09-30 2 views
-5

메신저 내 배열에서 요소를 제거하려고하고 내 int ptrs 함께 여러 간접 지정을 사용하여 울트라 efficeint 수 있는지 궁금 해서요. 내 고정 배열다중 간접 지정 C++ 정수 유형

maxSize를 내 hashTable- 내에있는> maxSize를

I는 참조 용으로 만 내 해시 테이블의 개인 회원이 maxSize 를 참조 할 수 있어야합니다

. varaible : & maxSize는 아무 것도 저장하지 않으며 NULL입니다. 내 고정 크기가되는 것이 hashTable-> maxSize입니다.

bool hashmap::remove(char const * const symbol) 
{ 
int **previous_index = &maxSize; 
int *current_index = *previous_index; 

while (current_index && 
      strcmp(symbol, hashTable[*current_index].m_symbol) != 0) 
{ 
    previous_index = &current_index + 1; 
    current_index = *previous_index; 
} 
return true; 
} 

필자는 * maxSize int single ptr로 컴파일하려고 노력해 왔습니다. 하지만 많은 코드가 있고 그 모두가 영향을받습니다. hehe.

+0

Andre는 오늘 도움이되었습니다. 나는 심지어 답장을 해결책으로 표시했는지 확인한다. – user40120

+1

여기에 질문이 있습니까? .. 난 이해가 안돼 .. –

+0

내 hashTable -> maxSize 배열의 내 고정 크기로 11의 정수 값을 보유하고 있습니다. 참조로 사용할 수있는 maxSize에는 아무 것도없고 null입니다. 해쉬 테이블 -> maxSize를 참조로 쓰는 방법이 있습니까? – user40120

답변

1

해시 맵은 많은 시간을 절약하기 위해 std::map<std::string, list<T *>>을 쉽게 사용할 수 있습니다. 당신이 정말로 해시 맵을 원하는 경우에

bool hashmap::remove (const char *key) 
{ 
    m_map.remove(key); 
} 
+0

thats 에즈? – user40120

+0

필자가 작성한 내용은 거의 완성되었습니다. – user40120

+0

더 똑똑하고 효율적인 방법입니다. STL을 사용하고, 싸우지 마십시오. –

3

, 당신이 직접 표준 : TR1 :: unordered_map도의 TR1에 입학을 사용하는 것이 좋습니다 것입니다 : 개인지도를 이용하여 제거 심볼 기능으로 간단 할 것 C++ 표준은 2003 년에 시작되어 많은 컴파일러에서 구현되었습니다. 다음 표준 (C++ 0x) 내에서 std :: unordered_map이됩니다.

코드에 대한 비판을 원한다면 C 스타일 문자열을 사용하지 말고 std :: string을 선호하십시오. 코드가 무조건 true를 반환한다면 코드가 전혀 반환되지 않아야한다고 생각하십시오. 알고리즘에 주석을 달아주십시오 (각 행이 아님). 일치 항목을 찾아서 제거 할 때까지 뒤로 검색하십시오. 제거가 수행됩니다 ... 다른 사람이 코드가 의도를 준수하지 않는 부분을 찾는 데 도움이됩니다. 배열을 반복하는 방법을 아직 이해하지 못했습니다. 코드는 여러 곳에서 의도와 다를 수 있습니다.

실제로 해시 맵을 구현하는 경우 해시 알고리즘을 사용하여 제거 할 요소를 찾아야합니다 (존재하는 경우). 선형 검색을 위해 O (1) 검색 시간을 갖는 복잡한 시스템을 구축하는 것은 의미가 없습니다.

관련 문제