Можно ли узнать значение хэша (хешированный ключ) для элемента в unordered_set
?Получить неупорядоченное значение хэша и является ли оно постоянным
Например,
unordered_set<string> errorStates;
errorStates.insert("File does not exist");
// Can I get the hash of this key?
int ERR_FILE_NOT_EXISTS = errorStates.keyHash("File does not exist");
Также будет хэш для File does not exist
всегда быть такой же? Будет ли хэш одинаковым, если я запустил свою программу и вложил 20 значений в errorStates
, а когда я запустил программу и ввел 200? Идея заключается в том, что хэш будет уникальным идентификатором ошибки и записывает хэш в файл.
Я создаю класс Status
, чтобы легко возвращать результаты ошибок/успехов из функций и получать сообщение об ошибке из кода ошибки - см. Ниже его частичную реализацию. Но, может быть, есть более подходящий способ?
//usage
Status evtState = onMouseMove();
Status copyState = fileCopy();
class Status
{
public:
static STATE registerState(const tstring &stateMsg)
{
states.emplace(stateMsg);
return states.hashValue(stateMsg);
}
Status(const STATE &state) : state(state) {}
~Status() {}
string toString()
{
unordered_set<tstring>::const_iterator ele = states.find(state);
return (ele != states.end()) ? *ele : "Undefined";
}
ostream& operator<<(Status& obj)
{
return cout << obj.toString();
}
private:
static unordered_set<tstring> states;
const STATE state;
};
'Можно ли узнать значение хэша (хешированный ключ) для элемента в неупорядоченном_set'? Конечно: 'my_set.hash_function() (element)'. –
@IgorTandetnik Спасибо, что отвечает на одну часть. Будет ли хэш всегда постоянным? Независимо от размера набора, OS 32 бит или 64 бит? –
'Также будет ли хэш всегда одинаковым?' Это лучше. Как бы набор мог найти какой-либо элемент, если его хэш продолжает меняться? Это было бы не очень хэш-функция, а скорее генератор случайных чисел. –