gpt4 book ai didi

c++ - std::map:使用键类以外的参数重载 operator<

转载 作者:行者123 更新时间:2023-11-28 05:38:48 25 4
gpt4 key购买 nike

这是我的第一篇文章 - 如果我弄乱了网站的任何约定,我深表歉意。请指出我犯的任何错误,以便我可以改正它们/不再重复它们。

This post may be related

c++ reference: std::map

c++ reference: std::map - rational operators

我希望能够使用 std::mapoperator[]通过放置 std::string在括号之间 - 即使 map 的键不是 std::string .

这是代码

class myKey
{
public:
std::string _name;

myKey(std::string name)
{
_name = name;
}

bool operator<(const myKey& other) const
{
if (this->_name < other._name)
{
return true;
}
else
{
return false;
}
}
};

int main()
{
std::map<myKey, int> map;
myKey temp("keyString");
map[temp] = 1;
std::cout << map[temp];

system("pause");
return 0;
}

到目前为止一切正常 - 但如您所见,运算符(operator)唯一使用的是 std::string _name类的字段。我不想通过仅输入如下字符串来查找 map 中的值:map["keyString"] .

我试过重载 operator<myKey , 但它没有帮助。

bool operator<(const std::string name) const
{
if (this->_name < name)
{
return true;
}
else
{
return false;
}
}

如何实现?

最佳答案

"" 是字符串文字,类型为 const char*。当您执行 map["keyString"] 时它不起作用的原因是因为 "keyString" 首先必须转换为 std::string ,然后它可以作为 key 传递。

但是因为它必须先转换(到std::string),这是非法的。

你可以只添加一个接受const char*的构造函数:

myKey(const char* name) : _name{ name } {}

如果不想添加新的构造函数,可以使用std::string_literals::operator""s .

using namespace std::string_literals;

//Note 's' after "", this means that "keyString" is of type std::string, not const char*
map["keyString"s] = 1;

关于c++ - std::map:使用键类以外的参数重载 operator<,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37627860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com