提问人:James Franco 提问时间:8/20/2023 最后编辑:Jan SchultkeJames Franco 更新时间:8/20/2023 访问量:42
列表初始化 std::map 以结构体为键
List initialization of std::map with a struct as a key
问:
我目前有这个:
struct Foo {
int value = 12;
Foo(int a) : value(a) {}
};
我正在尝试这样做:
std::map<Foo,int> m{
{{1}, 2}
};
为什么上面给出编译错误:
error: invalid operands to binary expression ('const Foo' and 'const Foo')
答:
2赞
Employed Russian
8/20/2023
#1
当我编译您提供的代码时,我得到一个不同的(且不言自明的)错误:g++
/usr/include/c++/12/bits/stl_function.h: In instantiation of ‘constexpr bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = Foo]’:
/usr/include/c++/12/bits/stl_function.h:408:20: error: no match for ‘operator<’ (operand types are ‘const Foo’ and ‘const Foo’)
由于您用作排序容器中的键,因此必须告诉编译器如何将两者进行比较。Foo
Foo
例如,添加此方法可使其编译:
bool operator<(const Foo& lhs, const Foo& rhs) {
return lhs.value < rhs.value;
}
或者,如果您使用的是 C++20,则只需将默认的三向比较添加到 以定义所有比较运算符:struct
friend auto operator<=>(const Foo&, const Foo&) = default;
评论