使用 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 只有很少的用例。如果您没有非常具体的理由使用它,您可能不应该尝试使用它。