我有一个键类型为std::pair<Foo,Bar>和值in的 map ,我想通过将一对std::pair<std::pair<Foo,Bar> , int>传递给插入函数来插入 map (online source)

struct Foo{};
struct Bar{};

typedef std::pair<Foo,Bar>        FooBar;
typedef std::pair<FooBar,int>     FooBarPair;
typedef std::map<FooBar,int>      FooBarMap;


struct FooBarData
{
    operator const FooBarPair() const
    {
        return std::make_pair( std::make_pair( m_foo , m_bar ) , m_num );
    }

private:
    int     m_num;
    Foo     m_foo;
    Bar     m_bar;
};

int main()
{
    FooBarData  fbd;
    FooBarMap   fbm;

    fbm.insert( fbd );
}

lang错误消息
/usr/include/c++/v1/map:1041:9: note: candidate function not viable: no known conversion from 'FooBarData' to 'const value_type' (aka 'const pair<const key_type, mapped_type>') for 1st argument
    insert(const value_type& __v) {return __tree_.__insert_unique(__v);}
    ^
/usr/include/c++/v1/map:1050:14: note: candidate function template not viable: requires 2 arguments, but 1 was provided
    void insert(_InputIterator __f, _InputIterator __l)
         ^
/usr/include/c++/v1/map:1045:9: note: candidate function not viable: requires 2 arguments, but 1 was provided
    insert(const_iterator __p, const value_type& __v)

有没有解决这些问题?

最佳答案

添加缺少的operator <

另外,从转换运算符的返回类型中删除const

编辑在Q中更改后:

您必须将转换更改为

operator std::pair<const FooBar, int>() const

否则,将需要2个用户转换,这是不允许的。

Demo

关于c++ - 使用用户定义的转换创建 map 条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35776299/

10-13 07:37
查看更多