해시 테이블을 직접 프로그래밍하고 있습니다. 이 프로젝트의 경우 데이터를 저장하는 테이블 인 std::list
배열이 있습니다. 모든 목록은 std::pair
개의 개체로 구성됩니다. 쌍에는 std::string
(사람의 이름)과 사용자 지정 클래스 (해당 사용자에 대한 데이터가 들어있는 클래스)의 개체에 대한 포인터가 포함되어 있습니다.std :: string 및 사용자 정의 객체를 std :: pair에 저장
해시 테이블에 데이터를 삽입하기위한 put() 메서드 구현에 문제가 있습니다. 이것이 제가 작성한 코드입니다.
pair<string,StudentRecord*>* HashTable::put(string& p_Name, StudentRecord* p_StudentRecord){
std::pair<std::string, StudentRecord*> ptr = { p_Name, p_StudentRecord };
this->put(&ptr);
return &ptr;
}
void HashTable::put(pair<string, StudentRecord*>* p_HTElement){
string key = p_HTElement->first;
int storage_place = this->m_Hasher->hash(key) % this->m_Capacity;
this->m_Table[storage_place].push_back(p_HTElement);
this->m_NumberOfEntries++;
this->updateLoadFactor();
if (this->m_LoadFactor >= MAX_LOAD_FACTOR)
this->rehash();
}
데이터를 추가해야하는 경우 첫 번째 방법이 호출됩니다. 이 메서드는 std::pair
개체를 만들고이 개체에 대한 참조를 두 번째 메서드로 전달합니다. 그런 다음 두 번째 방법은 해시를 계산하여 std :: list 배열에 저장합니다. 그러나 문제는 배열에 넣어 후 std::string
(쌍의 첫 번째 요소) 더 이상 읽을 수 없다는 것입니다. 디버거를 살펴보면 값이 ""라는 것을 알 수 있습니다. 나중 단계에서 해시 테이블의 데이터를 찾으려면 printHashTable() 메서드가 해당 목록을 인식하지만 데이터를 읽을 수 없습니다. 다시 디버거는 한 쌍의 첫 번째 요소와 그것이 말하는 사용자 정의 개체에 대한 문자열
의
오류 읽기 문자를 말한다
0xccccccccc
이 인쇄 할 필요가 내 방법입니다 해시 테이블의 모든 데이터 :
void HashTable::printTable(){ for (int i = 0; i < this->m_Capacity; i++){ if (!this->m_Table[i].empty()) { for (std::list<std::pair<std::string, StudentRecord*>*>::iterator element = this->m_Table[i].begin(); element != this->m_Table[i].end(); ++element) { cout << (*element)->first << endl; } } } }
회원 변수의 유형은 무엇입니까? – tillaert
로컬 변수에 대한 포인터를 반환 중 ... –
맞춤 클래스의 멤버 변수 StudentRecord? 학생 기록은 단지 std :: string과 int 변수로 구성됩니다. @MarcGlisse 알겠습니다. 그러나 새로운 쌍 객체를 만들어야하고 put() 메서드 내에서 만들 수없는 경우 어떻게해야합니까? –