首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建变体类和std::map<Variant、Variant>

创建变体类和std::map<Variant、Variant>
EN

Stack Overflow用户
提问于 2019-11-14 23:58:34
回答 1查看 103关注 0票数 1

我制作了一个简单的变体类来存储字符串、整数、双值等。我试图使用std::map<Variant, Variant>类型的映射,但是我得到了一个奇怪的错误:

代码语言:javascript
复制
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; }
                ~~~~^~~~~

这是我的变体类:

代码语言:javascript
复制
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;

这就是错误发生的地方:

代码语言:javascript
复制
void Event::add(std::string key, std::string value) {
    this->map[key] = Variant(value); //problem here
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-15 00:17:01

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

因此,如果您想在地图中使用Variant (我相信这只适用于键),则需要为它提供一个operator<()。您可以找到一些示例这里

或者,你需要一个比较函数。也能用。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58868341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档