나는 열쇠로 char*
과 value
로 vector<int>
이있는 unordered_map도를 만들려고합니다. 이전 질문에서 char*
에 대한 해시 함수가 STL에 의해 제공되지 않았다는 것을 알게되었습니다. C++ : unordered_map <char *, vector <int>>에 대한 해시 함수가 작동하지 않는 이유는 무엇입니까?
그래서 나는 다음과 같은 코드를 삽입 내 main.cpp
파일을 갖는
std::unordered_map<char *, vector<int>> test;
:
namespace std
{
template<>
struct hash<char*>: public std::unary_function<char *, size_t>
{
size_t operator()(char * str) const{
size_t hash = 5381;
int c;
while(c = *str++)
hash = ((hash << 5) + hash) + c; /* hash * 33 + c */
return hash;
}
};
}
그럼 내가 unordered_map도 변수를 생성을 그러나이 작업을 수행하여 "temp"값을 두 번 삽입하면
std::unordered_map<char *, vector<int>> test;
char *t1 = new char[5];
strcpy(t1, "temp");
char *t2 = new char[5];
strcpy(t2, "temp");
vector<int>& ptr = test[t1];
ptr.push_back(0);
vector<int>& ptr2 = test[t2];
ptr2.push_back(1);
벡터의 각 요소가 0 또는 1 인 크기가 2 인 벡터가있는 "temp"키 대신 "temp"라는 이름을 가진 두 개의 키가 있으며 각 키에는
가 어떻게 이런 일이 발생하지 않도록 할 수 : 여기
크기 1. 상세한 그림인가? 미리 감사드립니다.
'std :: string'을 사용하지 않는 이유는 무엇입니까? 해시 테이블에 메모리가 누출됩니다. 표준을 사용하여 몇 가지 이유로 – jxh
는 : 문자열은 우리가하지만 경우에, 나에게 아무것도 난 아무것도 변하지 않을 것이라는 느낌 ... – ksm001