Как я могу использовать легкий аргумент в методе find () unordered_set?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как я могу использовать легкий аргумент в методе find () unordered_set?

Сообщение Anonymous »

Должен ли я построить объект хранения полностью, чтобы найти его вместо этого, используя std :: string, потому что имея оператор == для него?

Код: Выделить всё

#include 
#include 
#include 
#include 

struct Storage
{
struct Hash
{
std::size_t operator()(const Storage& storage) const noexcept
{
return std::hash{}(storage.key);
}
};

std::string key;
// One more fat fields...
};

bool
operator==(const Storage& lhs, const Storage& rhs) noexcept
{
return lhs.key == rhs.key;
}

bool
operator==(const Storage& lhs, const std::string& rhs) noexcept
{
return lhs.key == rhs;
}

int
main()
{
auto uset = std::unordered_set
{
{ .key="42" }
};

// Variant #1 - works
auto it = uset.find({ .key="42" /* and init other fields */ });

// Variant #2 - doesn't compiles :(
auto it = uset.find(std::string("42"));
}
Я попробовал оператор std :: string () для struct storage и я попробовал различные варианты horage :: operator == () как этот Bool Operator == (const storm & lhs, const std :: string & rhs) и этот Bool Operator == (const std :: std & lhs, const & rhs, string & lhs, const & rhs, const & rhs, rts & lhs, const & lhs, const & lhs, const & rhs, rshs & rhs, rhs, rhs). : (

Подробнее здесь: https://stackoverflow.com/questions/797 ... rdered-set
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»