gpt4 book ai didi

c++ - 创建一个 Variant 类和 std::map

转载 作者:行者123 更新时间:2023-11-30 02:13:47 27 4
gpt4 key购买 nike

我创建了一个简单的 Variant 类来存储字符串、整数、 double 等。我正在尝试使用 std::map<Variant, Variant> 类型的映射但我收到了这个奇怪的错误:

In file included from /usr/include/c++/7/string:48:0,
from /home/dev/proj/cpp/common/Variant.h:3,
from /home/dev/proj/cpp/common/Event.h:3,
from /home/dev/proj/cpp/common/Event.cpp:1:
/usr/include/c++/7/bits/stl_function.h: In instantiation of 'constexpr bool std::less<_Tp>::operator()(const _Tp&, const _Tp&) const [with _Tp = Variant]':
/usr/include/c++/7/bits/stl_map.h:511:32: required from 'std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](std::map<_Key, _Tp, _Compare, _Alloc>::key_type&&) [with _Key = Variant; _Tp = Variant; _Compare = std::less<Variant>; _Alloc = std::allocator<std::pair<const Variant, Variant> >; std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = Variant; std::map<_Key, _Tp, _Compare, _Alloc>::key_type = Variant]'
/home/dev/orwell/cpp/common/Event.cpp:33:18: required from here
/usr/include/c++/7/bits/stl_function.h:386:20: error: no match for 'operator<' (operand types are 'const Variant' and 'const Variant')
{ return __x < __y; }
~~~~^~~~~

这是我的变体类:

class Variant
{
public:
enum class Type
{
Integer,
Double,
String
};

Variant()
{
}

Variant(int integer)
{
this->type = Type::Integer;
setInteger(integer);
}

Variant(std::string string)
{
this->type = Type::String;
setString(string);
}

Variant(double _double)
{
this->type = Type::Double;
setDouble(_double);
}

Type type;

这是错误发生的地方:

void Event::add(std::string key, std::string value) {
this->map[key] = Variant(value); //problem here
}

最佳答案

std::map是一个排序数组。为此,它使用 <运算符(operator)。

因此,如果您想使用 Variant在 map 中(我相信这只适用于 key ),你需要提供一个 operator<()为了它。你可以找到一些例子 here .

或者,您需要一个 comparison function .那也可以。

关于c++ - 创建一个 Variant 类和 std::map<Variant, Variant>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58868341/

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