使用 map<any,any> 时未定义二进制比较
binary comparison not defined when using map<any,any>
我正在寻找一种将 string[]
作为映射值的方法,我找到了 this Stack Overflow question。我试图使用 std::any
类型来解决我的问题,但我得到了错误
binary '<': 'const _Ty' does not define this operator or a conversion to a type acceptable to the predefined operator
这是我的代码:
#include <iostream>
#include <map>
#include <any>
using namespace std;
map<any,any> dat;
int main()
{
any s[] = {"a","b"};
dat["text"] = s;
return 0;
}
默认情况下,std::map
要求密钥类型与 <
相当。 std::any
未定义任何 operator<
,因此默认情况下不能用作地图中的键。
如果你真的想在地图中使用它作为键,你需要实现自己的比较器,参见this question。
但是,比较器需要定义弱严格顺序。为 std::any
.
定义它可能并不容易
map<any,any>
不太可能是解决您要解决的任何问题的正确方法。
如果您想要 std::string
数组作为键或值类型,请使用 std::array<std::string, N>
或 std::vector<std::string>
而不是普通的 std::string[N]
.
std::map
将开箱即用地处理这些类型。
std::any
只有很少的用例。如果您没有非常具体的理由使用它,您可能不应该尝试使用它。
我正在寻找一种将 string[]
作为映射值的方法,我找到了 this Stack Overflow question。我试图使用 std::any
类型来解决我的问题,但我得到了错误
binary '<': 'const _Ty' does not define this operator or a conversion to a type acceptable to the predefined operator
这是我的代码:
#include <iostream>
#include <map>
#include <any>
using namespace std;
map<any,any> dat;
int main()
{
any s[] = {"a","b"};
dat["text"] = s;
return 0;
}
std::map
要求密钥类型与 <
相当。 std::any
未定义任何 operator<
,因此默认情况下不能用作地图中的键。
如果你真的想在地图中使用它作为键,你需要实现自己的比较器,参见this question。
但是,比较器需要定义弱严格顺序。为 std::any
.
map<any,any>
不太可能是解决您要解决的任何问题的正确方法。
如果您想要 std::string
数组作为键或值类型,请使用 std::array<std::string, N>
或 std::vector<std::string>
而不是普通的 std::string[N]
.
std::map
将开箱即用地处理这些类型。
std::any
只有很少的用例。如果您没有非常具体的理由使用它,您可能不应该尝试使用它。